Короче говоря, все запросы 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/" />
Если им действительно потребуется манипулировать данными, они будут заблокированы той же политикой происхождения, как указано выше.