Кто-нибудь может помочь мне понять, как начать работать с JSONP?
Код:
$('document').ready(function() {
var pm_url = 'http://twitter.com/status';
pm_url += '/user_timeline/stephenfry.json';
pm_url += '?count=10&callback=photos';
var photos = function (data) {
alert(data);
};
$.ajax({
url: pm_url,
dataType: 'jsonp',
jsonpCallback: 'photos',
jsonp: false,
});
});
Скрипка: http://jsfiddle.net/R7EPt/6/
Насколько я могу понять из документации, должен выдать предупреждение: нет (но также не выдает никаких ошибок).
Спасибо.
Ответы:
JSONP - это действительно простая уловка для преодоления XMLHttpRequest той же политики домена. (Как вы знаете, нельзя отправить запрос AJAX (XMLHttpRequest) в другой домен.)
Итак, вместо использования XMLHttpRequest мы должны использовать теги HTMLl скрипта , которые вы обычно используете для загрузки файлов JS, чтобы JS мог получать данные из другого домена. Звучит странно?
Дело в том, что теги сценариев можно использовать аналогично XMLHttpRequest ! Проверь это:
В результате вы получите сегмент сценария, который выглядит следующим образом после загрузки данных:
Однако это немного неудобно, потому что мы должны извлечь этот массив из тега script . Поэтому создатели JSONP решили, что это будет работать лучше (и это так):
Заметьте функцию my_callback там? Итак, когда JSONP- сервер получит ваш запрос и найдет параметр обратного вызова - вместо возврата обычного массива JS он вернет следующее:
Посмотрите, где прибыль: теперь мы получаем автоматический обратный вызов ( my_callback ), который будет запущен, как только мы получим данные. Это все, что нужно знать о JSONP : это обратный вызов и теги сценария.
ПРИМЕЧАНИЕ.
Это простые примеры использования JSONP, это не готовые производственные сценарии.
Демонстрация RAW JavaScript (простой канал Twitter с использованием JSONP):
Базовый пример jQuery (простой канал Twitter с использованием JSONP):
JSONP означает JSON с отступом . (очень плохо названная техника, поскольку она на самом деле не имеет ничего общего с тем, что большинство людей считает «заполнением».)
источник
Access-Control-Allow-Origin
заголовки, которые позволяют совершать регулярные Ajax-вызовы в некоторые домены разных источников.Существует еще более простой способ работы с JSONP с использованием jQuery.
В
?
конце URL-адреса указывается jQuery, что это запрос JSONP, а не JSON. jQuery регистрирует и вызывает функцию обратного вызова автоматически.Для более подробной информации обратитесь к документации jQuery.getJSON .
источник
&callback=?
как это не первый параметр в вашем случае.В ответ на OP есть две проблемы с вашим кодом: вам нужно установить jsonp = 'callback', и добавление функции обратного вызова в переменную, как вы, похоже, не работает.
Обновление: когда я писал это, API Twitter был просто открыт, но они изменили его, и теперь он требует аутентификации. Я изменил второй пример на рабочий (2014Q1), но теперь использую github.
Это больше не работает - в качестве упражнения посмотрите, можете ли вы заменить его на Github API:
хотя alert () с таким массивом не очень хорошо работает ... Вкладка «Net» в Firebug покажет вам JSON должным образом. Еще один полезный трюк делает
Вы также можете использовать метод jQuery.getJSON . Вот полный пример HTML, который получает список "Gists" от GitHub. Таким образом, он создает для вас функцию обратного вызова со случайным именем, это и есть последнее «callback =?» в URL.
источник
Приведенный выше код помогает получать изображения из Flicker API. При этом используется метод GET для получения изображений с использованием JSONP. Подробнее можно найти здесь
источник