Для получения данных с чужого сервера, не прибегая к
CORS, был давно придуман
JSONP.
Однако, весь смысл использования
JSONP в динамическом создании скрипта с адресом, в котором перечислены не только параметры, но и название
callback-функции, которое позволит запустить её из контекста
eval.
Это означает, что серверный скрипт должен уметь формировать вызов
callback-функции, в которую передаются сформированные данные. Как правило, название параметра функции
callback. Если не указать имя самой функции,
jQuery сформирует случайное название и саму функцию в виде свойства глобального объекта.
Пример 1$.ajax({
url: '//api.vk.com/method/database.getCountries',
data: {
need_all: 1,
count: 300
},
dataType: 'jsonp'
})
.done(function(data) {
console.log(data);
});
Иногда название параметра с названием функции может отличаться — это известно заранее.
Пример 2$.ajax({
url: 'http://api.flickr.com/services/feeds/photos_public.gne',
dataType: 'jsonp',
jsonp: 'jsoncallback',
data: {
tags: 'mount rainier',
tagmode: 'any',
format: 'json'
}
}).done(function (data) {
console.log(data);
});
Если сервер, к которому вы обращаетесь, не в состоянии сформировать ответ с вызовом функции по переданному имени, то вариант с
JSONP не прокатит.