Метод JSONP использует совершенно другой механизм для отправки HTTP-запросов на сервер и обработки ответа. Требуется совместный код на странице клиента и на сервере. Сервер должен иметь URL-адрес, который отвечает на запросы HTTP «GET» с блоком JSON, заключенным в вызов функции. Таким образом, вы не можете просто выполнять транзакции JSONP на любом старом сервере; это должен быть сервер, который явно предоставляет функциональность.
Идея состоит в том, что ваш клиентский код динамически создает блок <script>
с атрибутом "src", установленным на URL-адрес сервера JSONP. URL-адрес должен содержать параметр, сообщающий серверу имя функции Javascript, которую вы ожидаете вызвать с данными JSON. (Какое именно имя параметра использовать зависит от сервера; обычно это «обратный вызов», но я видел некоторые, которые используют «jsonp».) Клиент, конечно, должен иметь эту функцию в глобальной области видимости. Другими словами, если у вас есть такая функция, как
function handleJSON(json) {
var something = json.something;
// ... whatever ...
}
тогда ваш URL говорит серверу вызвать "handleJSON", и ответ сервера должен выглядеть следующим образом:
handleJSON({"id": 102, "something": { "more": "data", "random": true }});
Таким образом, когда блок <script>
загружается из указанного вами URL-адреса "src", браузер интерпретирует содержимое (ответ от сервера) и будет вызываться ваша функция.
Должно быть ясно, что вы должны отправлять запросы JSONP только тем серверам, которым доверяете, поскольку они отправляют код для выполнения на вашем клиенте с доступом к любым активным сеансам, которые ваш клиент имеет с другими защищенными сайтами. 1013 *
изменить & mdash; Вот хорошая статья: http://www.ibm.com/developerworks/library/wa-aj-jsonp1/