2009-10-22 3 views
3

В jQuery documentation перечислены следующие примеры использования $ .getJSON запросить JSONP:Могу ли я использовать статическое (то есть заданное) имя функции обратного вызова при запросе JSONP с помощью jQuery?

$.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=? 

I хочу иметь возможность заранее установить имя функции жесткого кодирования, например:

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

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

ответ

3

defined in the documentation Как для вас использовать следующий метод

jQuery.getJSON(...) 

вам необходимо указать callback=? при принятии JSONP вызова. Обычно я использую это только для типов ответов «json». Для типов реагирования "JSONP", вы хотите использовать:

jQuery.get(...) 

и указать type как "JSONP". См. Это documentation on the subject. Но это также связано с фактом наличия callback=?.

То, что я думаю, что вы looking for is this:

jQuery.getScript(...) 

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

+0

Большое спасибо, Ник! Думаю, я не искал нужного места. Я ценю помощь. – Bungle

1

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

using a named function as the callback for $.getJSON in jQuery to satisfy Facebook request signing demands

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

 Смежные вопросы

  • Нет связанных вопросов^_^