Описание тега jsonp
JSONP или "JSON с заполнением" - это метод связи, используемый в программах JavaScript, работающих в веб-браузерах, для запроса данных с сервера в другом домене, что запрещено типичными веб-браузерами из-за политики одного и того же происхождения. JSONP использует тот факт, что браузеры не применяют политику одного и того же происхождения для<script>
теги.
Чтобы предотвратить создание междоменных сценариев, браузеры обычно блокируют запросы XMLHttpRequest (XHR) к другим доменам. JSONP обходит это, обертывая или "дополняя" ответ JSON, чтобы его можно было выполнить как сценарий.
По этой причине и сервер, и клиент должны поддерживать JSONP. Клиент добавляет новый<script>
тег на страницу, а не создает XHR, и обычно сообщает серверу, какое имя функции следует использовать для заполнения:
<script src="http://www.example.com/api/getdata?callback=response"></script>
Затем сервер упаковывает ответ JSON в вызов этой функции, которая должна быть реализована клиентом:
response({
"example1": "somedata",
"example2": "moredata"
});
Многие клиентские библиотеки Ajax абстрагируются от деталей запросов JSONP, позволяя клиентскому коду обрабатывать их как обычные запросы JSON.
Пример jQuery api
$.ajax({
url: 'http://www.example.com/api/getdata',
jsonpCallback: 'jsonCallback',
contentType: "application/json",
dataType: 'jsonp',
success: function(json) {
console.log(json);
},
error: function(e) {
console.log(e);
}
});
Примечание по безопасности:
Убедитесь, что вы доверяете серверу, предоставляющему ответ JSONP, поскольку этот метод позволяет странице возвращать скрипт, который будет выполняться в контексте вашей страницы. Подключение к ненадежной службе может дать им доступ к вашей в остальном безопасной информации.
Ссылки