Могу ли я использовать статическое (то есть заранее определенное) имя функции обратного вызова при запросе JSONP с jQuery?
-
05-07-2019 - |
Вопрос
В документации по jQuery приведен следующий пример использования $ .getJSON для запроса JSONP.
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?",
function(data) {
$.each(data.items, function(i,item) {
$("<img/>").attr("src", item.media.m).appendTo("#images");
if (i == 3) return false;
});
});
Вместо того, чтобы использовать этот метод, который генерирует имя функции динамического обратного вызова из-за этого параметра:
jsoncallback=?
Я хочу иметь возможность заранее установить для него жестко закодированное имя функции, например:
jsoncallback=test
Это работает, в том смысле, что я запускаю сценарий, а JSONP, который я получаю, имеет объект JSON, заключенный в вызов метода test ().
Однако я не могу понять, как настроить функцию обратного вызова. Разве это не должно быть так просто?
function test(data) {
console.log(data);
}
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=test");
Когда я пытаюсь это сделать, я возвращаю JSONP, который обернут в test (), но определенная мной функция test () никогда не вызывается. Я что-то упустил?
Спасибо за любую помощь!
Решение
Как определено в документации , чтобы вы использовали следующий метод р>
jQuery.getJSON(...)
вам нужно указать callback =?
при выполнении вызова JSONP. Обычно я использую это только для типов ответов "json". Для типов ответов " jsonp " вы хотите использовать:
jQuery.get(...)
и укажите type
как " jsonp " ;. См. Эту документацию по этому вопросу . Но это также связано с фактом наличия callback =?
. Р>
Я думаю, что вы ищете это :
jQuery.getScript(...)
Который должен выполнять любой метод, который вы определили в вашем обратном вызове
.
Другие советы
Ах, "Связанный" Раздел боковой панели спас меня здесь. После того, как я отправил этот вопрос, я нашел похожий вопрос, который уже задавался:
Ответ Дункана от 15 октября решил это для меня:
window.fixed_callback = function(data){
alert(data.title);
};
$(function() {
$.getScript("http://api.flickr.com/services/feeds/photos_public.gne?tags=cats&tagmode=any&format=json&jsoncallback=fixed_callback", function(data) {
alert('done'); } );
});
Я предполагаю, что ключ использует $ .getScript вместо $ .getJSON. Можно по-прежнему указывать анонимную функцию обратного вызова в параметрах метода $ .getScript, который будет выполняться после функции обратного вызова, названной в параметрах URL-адреса запроса (в этом случае «fixed_callback»). Надеюсь, что это поможет кому-то в будущем.