Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do jQuery do its cross-domain ajax calls and how can I replicate em with mootools

in my eternal internal fight on whether to stay with mootools or jump to jQuery I've found on the jQuery documentation something that got my attention and this is that jQuery can ask for a JSON to a different domain, which is usually forbidden by the browser.

I've seen some workarounds for cross-subdomain, but never cross-domain, and I'm really thrilled, first I thought I was server related but experimenting a little bit more I've seend that doing the very same JSON request from jQuery docs on Mootools doesn't work!

This works jQuery:

$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?",
        function(data){
          $.each(data.items, function(i,item){
            $("<img/>").attr("src", item.media.m).appendTo("#images");
            if ( i == 3 ) return false;
          });
        });

This doesn't Mootools:

var jsonRequest = new Request.JSON({url: "http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?", onComplete: function(person, responseText){
    alert(responseText);
}}).get({});

How can I replicate this behavior ? what causes it ?

jQuery Doc: http://docs.jquery.com/Ajax/jQuery.getJSON#urldatacallback Mootols Doc: http://mootools.net/docs/Request/Request.JSON

like image 977
perrohunter Avatar asked Dec 08 '22 07:12

perrohunter


2 Answers

It's said right on the page that it's JSONP.

JSONP is a trick where the server, instead of returning the usual response, wraps it into a method call of the user-supplied method, e.g. instead of:

{"foo": "bar", "baz":"bah"}

It would return:

temporaryCallbackFunctionName({"foo": "bar", "baz":"bah"});

jQuery defines the temporary callback function and inserts a <script src="..."></script> element, which is not limited by the same origin policy.

When the script is loaded, the function is executed and that's it.

The downside is that if the server is evil (or hacked) it can now execute arbitrary code in your browser.

More info here.

like image 166
Jaka Jančar Avatar answered Dec 28 '22 06:12

Jaka Jančar


You may use JSONP in MooTools by using a plugin, JSONP. It's made by Aaron Newton, one of the core MooTools developers.

like image 33
moff Avatar answered Dec 28 '22 05:12

moff