Проблемы междоменных сценариев и JSONP - PullRequest
0 голосов
/ 29 марта 2010

Наш Клиент требует, чтобы мы поставили Widgits для их сайта. Они хотят связаться с нами, чтобы получить Html и jQuery, необходимые для манипулирования Html и выполнения асинхронных запросов. Я понимаю, что существуют ограничения междоменной безопасности, которые могут помешать этому, но некоторые из этих ограничений устраняются путем использования JSONP в качестве формата передачи данных.

Мне трудно найти объяснение того, что возможно в контексте того, чего я пытаюсь достичь. Может кто-нибудь, пожалуйста, заполните меня?

Ответы [ 3 ]

4 голосов
/ 29 марта 2010

Короче говоря, все запросы AJAX (и межоконные сценарии) подчиняются Одинаковой политике происхождения . JSONP ( JSON with Padding ) не подпадает под ту же политику происхождения, поскольку включает добавление сценария из внешнего домена в DOM, сам сценарий содержит вызов известной функции, которая уже существует клиент, с JSON в качестве аргумента вызова функции.

JSONP не может возвращать HTML или XML напрямую, но он может передавать объект, содержащий строку данных HTML или XML, которые, в свою очередь, могут быть добавлены в DOM или проанализированы клиентом.

Например, JSONP может вернуть:

jsonp_callback({"Errors":"none","Data":"<div id='externalWidget'>Hello!</div>"});

Когда этот скрипт добавляется на страницу, функция jsonp_callback будет выполняться с объектом JSON в качестве аргумента. Затем эта функция добавит HTML-код на страницу.

Есть и другие способы достижения того, чего вы хотите. Например, если клиенту не нужно каким-либо образом манипулировать данными, вы можете предоставить виджет через HTML-документ, который будет вставлен на страницу вашего клиента:

<iframe id="widget" src="http://mysite.com/widget/v1/" />

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

0 голосов
/ 06 апреля 2010

Похоже, вы можете использовать easyXDM (http://easyxdm.net/) для своих целей. Это библиотека, которая предоставляет междоменные сообщения и RPC.

Вы можете легко использовать его для настройки виджета на основе iframe (подобно классу build int Widget http://consumer.easyxdm.net/current/example/widgets.html) или использовать его только для получения необработанных данных.

Вы также можете взглянуть на образец xhr, который дает доступ к междоменному ajax в http://consumer.easyxdm.net/current/example/xhr.html, или на общий образец RPC в http://consumer.easyxdm.net/current/example/methods.html

0 голосов
/ 29 марта 2010

Насколько я знаю, JSONP использует теги SCRIPT для загрузки контента, который является внешним по отношению к домену, из которого загружается ваша вызывающая страница. Использование тега SCRIPT позволяет ссылаться на внешние URL-адреса. После загрузки этого внешнего «сценария» данные будут возвращены определенной функции обратного вызова, которая была передана через местоположение внешнего сценария.

JQuery: http://www.insideria.com/2009/03/what-in-the-heck-is-jsonp-and.html

MooTools: http://www.clientcide.com/wiki/cnet-libraries/06-request/00-jsonp

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