Почему jQuery автоматически не добавляет обратный вызов JSONP?

$.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, если Вам интересно.)

6
задан Aseem Kishore 12 March 2010 в 07:47
поделиться

2 ответа

Да, я думаю, вы неправильно поняли. $. GetJSON - это ярлык для $. Ajax ({datatype: 'json' .... , как указано в документации. Он никогда не выполняет вызов JSONP, если вы не добавите ] callback =? параметр.

3
ответ дан 8 December 2019 в 13:45
поделиться

Попробуйте так:

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',
});
7
ответ дан 8 December 2019 в 13:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: