В $.getJSON()
документации говорится:Почему не jQuery автоматически добавляет обратный вызов JSONP?
If the specified URL is on a remote server, the request is treated as JSONP instead. See the discussion of the
jsonp
data type in $.ajax() for more details.
$.ajax()
документация для состояний типа jsonp
данных (курсив мой):
Loads in a JSON block using JSONP. Will add an extra "?callback=?" to the end of your URL to specify the callback.
Таким образом, кажется, что если я называю $.getJSON()
с междоменном URL, дополнительный «callback =?» параметр должен автоматически добавляться. (Другие части документации поддерживают эту интерпретацию.)
Однако я не вижу такого поведения. Если я не добавлю «callback =?» явно, 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.
Спасибо!
(Edit:. Я cross-posted this в форумах JQuery, если вы заинтересованы)
В вашем примере вы на самом деле означаете 'jsonpCallback: 'alertResponse'', и да, это работает без меня, чтобы явным образом добавить« callback =? » параметр. Но это гораздо более многословно, чем элегантность '$ .getJSON()'. Было бы неплохо, если '$ .getJSON()' работал как документально ... –