Как работает этот междоменный запрос? - PullRequest
1 голос
/ 04 мая 2010
$.ajax(
{
    url : "http://search.twitter.com/search.json?q=google&lang=en&rpp=10&since_id=&callback=?",
    dataType : 'json',
    success : function(data)
    {
        alert(data.results.length);
    }
});

Как именно это работает? Я имею в виду междоменный запрос.

Ответы [ 3 ]

6 голосов
/ 04 мая 2010

jQuery обнаруживает часть callback=? вашего URL и автоматически переключает dataType с 'json' на 'jsonp'.

JSONP - это запрос JSON, который не выполнен с использованием XMLHttpRequestно добавив тег скрипта на вашу страницу.Обратный вызов в ваш скрипт обрабатывается вызывающей стороной, которая дает имя функции JavaScript, которая будет выполняться при загрузке скрипта.Вот почему междоменный домен работает.

jQuery будет прозрачно обрабатывать JSONP для вас в запросе $ .ajax.Ручной (и для меня более понятный) способ сделать это - определить 'jsonp' dataType и использовать заполнитель ? для имени обратного вызова в URL.jQuery автоматически заменит ? на соответствующее значение, чтобы вызвать ваш успешный обратный вызов.

$.ajax(
{
    url : "http://api.twitter.com/1/users/show/google.json&jsoncallback=?",
    dataType : 'jsonp',
    success : function(data)
    {
        alert(data.results.length);
    }
});
2 голосов
/ 04 мая 2010

jQuery определяет вашу функцию обратного вызова в глобальной области видимости, а затем заменяет callback=? в URL-адресе на callback=nameItGaveTheFunction.

Затем он работает как обычный запрос JSONP; использование тегов сценария и завершение ответа в функции обратного вызова.

1 голос
/ 04 мая 2010

Я считаю, что jQuery понимает, что это междоменный домен, и поэтому добавляет тег заголовка скрипта в заголовок страницы с соответствующим атрибутом src (вместо того, чтобы запускать запрос ajax). Это загружает JSON и затем запускает обратный вызов.

...