barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

пятница, 1 апреля 2011 г.

Выполнение JSONP-запросов в jQuery


JSONP - полезный подход для выполнения кроссдоменных асинхронных запросов, позволяющий обойти изместно ограницение XMLHTTPRequest. Смысл его заключается в добавлении на страницу тега <script>, загружающего данные формата JSON со стороннего домена:
<script src="/some/crossdomain/url/here" type="text/javascript"></script>

Полученный код должен содержать нечто вроде:
var data = {one : "12", two : "34"}
someCallback(data);

, где someCallback() - функция, которая должна обработать полученный JSON.

Чтобы получатель запроса знал, какую именно функцию написать вместо someCallback, имя функции должно передаваться в тексте запроса, например: URL_запроса?callback=myCallBack.

Но это всё теория, и если пользоваться jQuery, всё оказывается намного проще:

$.getJSON(crossdomainRequestUrl, function(data) { ... })


, где crossdomainRequestUrl должен заканчиваться на "&callback=?". Конечный знак вопроса укажет jQuery, что выполняется JSONP зарпос. При этом имя callback-функции указывать не нужно. Полученный JSON будет передан, как обычно, в обработчик, заданный вторым параметром $.getJSON. На серверной части значение параметра callback, которое будет сформировано jQuery самостоятельно, нужно исопльзовать как имя callback функции, вызов которой нужно вставить в выдаваемый в ответ JS-скрипт.

Комментариев нет:

Отправить комментарий