Как jQuery выполняет междоменные вызовы ajax и как я могу реплицировать их с помощью mootools - PullRequest
4 голосов
/ 07 апреля 2009

в моей вечной внутренней борьбе за то, чтобы остаться с mootools или перейти на jQuery, я нашел в документации jQuery что-то, что привлекло мое внимание, и это то, что jQuery может запросить JSON для другого домена, что обычно запрещено браузером.

Я видел некоторые обходные пути для кросс-поддоменов, но никогда не кросс-доменов, и я действительно взволнован, сначала я подумал, что связан с сервером, но экспериментируя немного больше, я вижу, что делает тот же JSON запрос из jQuery docs на Mootools не работает!

Это работает 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;
          });
        });

Это не 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({});

Как я могу повторить это поведение? что вызывает это?

JQuery Doc: http://docs.jquery.com/Ajax/jQuery.getJSON#urldatacallback Документ Mootols: http://mootools.net/docs/Request/Request.JSON

Ответы [ 4 ]

11 голосов
/ 07 апреля 2009

На странице прямо сказано, что это JSONP.

JSONP - это хитрость, при которой сервер вместо возврата обычного ответа упаковывает его в вызов метода, предоставленного пользователем, например, вместо:

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

Будет возвращено:

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

jQuery определяет временную функцию обратного вызова и вставляет элемент <script src="..."></script>, который не ограничен той же политикой происхождения.

Когда скрипт загружен, функция выполняется и все.

Недостатком является то, что если сервер злой (или взломанный), он теперь может выполнять произвольный код в вашем браузере.

Подробнее здесь .

3 голосов
/ 07 апреля 2009

Вы можете использовать JSONP в MooTools с помощью плагина, JSONP . Он сделан Аароном Ньютоном , одним из основных разработчиков MooTools.

1 голос
/ 02 мая 2009

Это включено в MooTools с версии 1.2.2 (выпущено 23 апреля 2009 г.).

Проверьте эту страницу документации для получения дополнительной информации.

0 голосов
/ 07 апреля 2009

Похоже, вы не можете сделать это с Mootools, в соответствии с его документами API и этим форумом .

Причина этого ограничена, вероятно, из-за межсайтовых скриптовых атак .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...