JSON с заполнением (JSONP) - это метод обхода междоменных ограничений Ajax.

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, поскольку этот метод позволяет странице возвращать скрипт, который будет выполняться в контексте вашей страницы. Подключение к ненадежной службе может дать им доступ к вашей в остальном безопасной информации.

Ссылки