Hello!
Thank you for both replies. The problem has thus for me been that I
didn't understand the difference between "inter-wikimedia" API CORS
usage and pure plain "anonymous guest" usage with JSONP. Maybe this
should be mentioned in the API documentation? I think many outside
users have dealt with it since there are many threads on Stack
Overflow.
Probably the best place would be in the API:Main_page page's
Introduction or Getting started section. The difference could be
stated as "inter-wikimedia sites as defined in
$wgCrossSiteAJAXdomains" and "outside guest usage". The
API:Main_page mentions bots and client programs as potential users,
but doesn't mention the relevant origin restrictions.
I understand that the The API:Cross-site_requests page tries to make
this distinction between them, but at the time I bumped into it, I
allready thought that it's just a matter of taste and not a matter
of origin [of the request]. The API:Cross-site_requests page could
link to two code snippets, the Manual:CORS (now wrongly linked under
"See also" section, as it would apply to both) and also a modified
snippet for JSONP usage. I attach a simple example down below.
That said, my problem was getting a truly cross-site request to work
(as not listed in $wgCrossSiteAJAXdomains).
The problem with using $.getJSON() as suggested by Magnus, is that I
can't set the necessary headers and thus comply with the API usage
best practices.
What was needed for getting $.ajax() to work for me, was to set the
dataType parameter to 'jsonp' (just adding the string 'callback=?'
to the url or data doesn't do the magic as it does when using
$.getJSON()) and setting cache to true.
Strangely enough, HTTP Origin is not sent for me, thus I cannot send
'origin' to the API. I get a mismatch back from the API if I send
it, but succeeds if I don't send it. I don't know HTTP, so I don't
know why this happens.
The code I ended up with was (although this doesn't reflect the
parameters needed for complyfng to best practices and API
etiquette):
$.ajax( {
'url': 'https://en.wikipedia.org/w/api.php',
'data': {
'action': 'query',
'meta': 'userinfo',
'format': 'json',
'origin': location.window // depends on whether HTTP Origin
header is sent or not
},
'xhrFields': {
'withCredentials': true
},
'success': function( data ) {
alert( 'Foreign user ' + data.query.userinfo.name +
' (ID ' + data.query.userinfo.id + ')' );
},
'dataType': 'jsonp',
'cache': true
} );
/* end of code snippet */
Best regards
Kristian K
01.09.2014 14:27, Magnus Manske
kirjutas:
Try JSONP (add "&callback=CALLBACKFUNCTION" to
your URL; jQuery: $.getJSON ( "URL&callback=?" will work)
_______________________________________________
Mediawiki-api mailing list
Mediawiki-api@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-api