$.getJSON()
состояния документации:
Если указанный URL находится на удаленном сервере, запрос рассматривают как JSONP вместо этого. Посмотрите обсуждение
jsonp
тип данных в $ .ajax () для получения дополнительной информации.
$.ajax()
документация для jsonp
состояния типа данных (шахта акцента):
Загрузки в блоке JSON с помощью JSONP. Добавит дополнительное"? обратный вызов =?" в конец Вашего URL для определения обратного вызова.
Таким образом, кажется этим, если я звоню $.getJSON()
с междоменным URL, дополнительный "обратный вызов =?" параметр должен автоматически быть добавлен. (Другие части поддержки документации эта интерпретация.)
Однако я не вижу того поведения. Если я не добавляю "обратный вызов =?" явно, jQuery неправильно делает XMLHttpRequest (который возвращает пустые данные, так как я не могу считать междоменный ответ). Если я действительно добавляю его явно, jQuery правильно выполняет <сценарий> запрос.
Вот пример:
var URL = "http://www.geonames.org/postalCodeLookupJSON" +
"?postalcode=10504&country=US";
function alertResponse(data, status) {
alert("data: " + data + ", status: " + status);
}
$.getJSON(URL, alertResponse);
// alerts "data: null, status: success"
$.getJSON(URL + "&callback=?", alertResponse);
// alerts "data: [object Object], status: undefined"
Таким образом, что продолжается? Я неправильно понимаю документацию или забываю что-то?
Само собой разумеется, что это не огромное соглашение, но я создаю веб-API, и я намеренно установил параметр обратного вызова на "обратный вызов" в надеждах на адаптацию его приятно к использованию jQuery.
Спасибо!
(Редактирование: Я осуществил кросспостинг этого на форумах jQuery, если Вам интересно.)
Да, я думаю, вы неправильно поняли. $. GetJSON
- это ярлык для $. Ajax ({datatype: 'json' ....
, как указано в документации. Он никогда не выполняет вызов JSONP, если вы не добавите ] callback =?
параметр.
Попробуйте так:
var URL = "http://www.geonames.org/postalCodeLookupJSON" +
"?postalcode=10504&country=US";
function alertResponse(data, status) {
alert("data: " + data + ", status: " + status);
}
$.ajax({
url: URL,
dataType: 'jsonp',
jsonpCallback: 'alertResponse',
});