Могу ли я использовать статическое (то есть заранее определенное) имя функции обратного вызова при запросе JSONP с помощью jQuery? - PullRequest
3 голосов
/ 22 октября 2009

В документации 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 () никогда не вызывается. Я что-то упустил?

Спасибо за любую помощь!

Ответы [ 2 ]

3 голосов
/ 22 октября 2009

Как определено в документации для вас использовать следующий метод

jQuery.getJSON(...)

необходимо указать callback=? при выполнении вызова JSONP. Я обычно использую это только для типов ответов "JSON". Для типов ответов "jsonp" вы хотите использовать:

jQuery.get(...)

и укажите type как "jsonp". См. Эту документацию по теме . Но это также связано с фактом наличия callback=?.

Я думаю, что вы ищете это :

jQuery.getScript(...)

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

1 голос
/ 22 октября 2009

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

использование именованной функции в качестве обратного вызова для $ .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»). Надеюсь, что это поможет кому-то в будущем.

...