Могу ли я использовать статическое (то есть заранее определенное) имя функции обратного вызова при запросе JSONP с jQuery?

StackOverflow https://stackoverflow.com/questions/1608302

Вопрос

В документации по 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(...)

Который должен выполнять любой метод, который вы определили в вашем обратном вызове .

Другие советы

Ах, "Связанный" Раздел боковой панели спас меня здесь. После того, как я отправил этот вопрос, я нашел похожий вопрос, который уже задавался:

используя именованная функция в качестве обратного вызова для $ .getJSON в jQuery для удовлетворения требований подписывания запросов Facebook

Ответ Дункана от 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»). Надеюсь, что это поможет кому-то в будущем.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top