JSONP - это способ обойти политику браузера того же происхождения . Как? Например:
Цель здесь - сделать запрос к otherdomain.com
и alert
имени в ответе. Обычно мы делаем запрос AJAX:
$.get('otherdomain.com', function (response) {
var name = response.name;
alert(name);
});
Однако, поскольку запрос отправляется в другой домен, он не будет работать.
Мы можем сделать запрос используя тег . И
, и
$.get('otherdomain.com')
приведут к тому же запросу:
GET otherdomain.com
Q: Но если мы используем тег , как мы можем получить доступ к ответ? Нам нужно получить к нему доступ, если мы хотим
alert
его.
A: Мы не можем. Но вот что мы можем сделать - определить функцию, которая использует ответ, а затем сказать серверу ответить JavaScript, который вызывает нашу функцию с ответом в качестве аргумента.
Q: Но что, если сервер выиграл 't сделать это для нас и только желает вернуть нам JSON?
A: Тогда мы не сможем его использовать. JSONP требует, чтобы сервер взаимодействовал.
Вопрос: использование тега уродливо.
A: Библиотеки, такие как jQuery , делают его более приятным . Пример:
$.ajax({
url: "http://otherdomain.com",
jsonp: "callback",
dataType: "jsonp",
success: function( response ) {
console.log( response );
}
});
Он работает путем динамического создания элемента DOM тега .
В: теги только делают запросы GET - что, если мы хотим сделать Запрос POST?
A: Тогда JSONP не будет работать для нас.
Q: Все в порядке, я просто хочу сделать запрос GET. JSONP потрясающе, и я собираюсь использовать его - спасибо!
A: На самом деле, это не так здорово. Это действительно просто хак. И это не самая безопасная вещь для использования. Теперь, когда CORS доступен, вы должны использовать его, когда это возможно.