Как обрабатывать обратный вызов JSONP с помощью jQuery?

Я использую jQuery для вызовов ajax к flickr API.

До сих пор я успешно обращался к API общедоступных фотографий и отображал результаты. Вот jQuery, который я использовал:

getPics = function(){
    $.ajax({
        url: 'http://api.flickr.com/services/feeds/photos_public.gne?format=json&jsoncallback=callbackForImages',
        dataType: 'jsonp'
    });
}
callbackForImages = function(data){
    clearResults();
    $.each(data.items, function(i, item) {
        $("<img/>").attr("src", item.media.m).appendTo("#results");
    });
}

Однако когда я пытаюсь использовать API форумов, я не знаю, как для форматирования функции обратного вызова.

Вот что у меня есть до сих пор.

getTopics = function(){
    $.ajax({
        url: 'http://api.flickr.com/services/feeds/forums.gne?format=json&jsoncallback=callbackForTopics',
        dataType: 'jsonp'
    });
}

callbackForTopics = function(data){
    clearResults();
    //this is the bit that's broken
    $.each(data.items, function()) {
        $("title").value.appendTo("#results");
    }
}

clearResults = function(){
    $("#results").html('<div id="results"></div>');
}

Будем признательны за любую помощь в понимании того, как использовать возвращенный JSONP.


person Conor Pender    schedule 31.05.2012    source источник
comment
callbackForTopics = function(){ должно быть callbackForTopics = function(data){   -  person Prasenjit Kumar Nag    schedule 31.05.2012
comment
Спасибо, Джой. Я сделал изменение.   -  person Conor Pender    schedule 31.05.2012


Ответы (3)


Часть выборки кажется неправильной. Попробуйте что-то вроде

$.each(data.items, function(idx,val) {
   $("#results").append($('<div></div>').text(val.title));
});

пример: http://jsfiddle.net/Y9Jj3/2/

person sofl    schedule 31.05.2012

Разница между первым фрагментом кода:

callbackForImages = function(data){

И второй кусок кода:

callbackForTopics = function(){

Вам не хватает параметра data в определении функции.

Кроме того, это странно:

$("title").value.appendTo("#results");

Не уверен, что вы имели в виду, но это точно не сработает.

Кстати, это можно легко обнаружить с помощью инструментов разработчика браузера (например, Firebug).

person Ja͢ck    schedule 31.05.2012
comment
Я не заметил отсутствующий параметр, хотя это его не исправляет. Строка, которую вы выделили как «странную», — это та, с которой у меня проблемы. Я просто вставил его, чтобы показать, что я пробовал. По сути, я хочу, чтобы он показывал заголовок каждого элемента, возвращаемого в div с id=results. - person Conor Pender; 31.05.2012

Я понял, что делать, благодаря ответам Джека и Софл. Мой метод обратного вызова должен был быть следующим:

callbackForTopics = function(data){
    clearResults();
    $.each(data.items, function(i, item) {
        $("#results").append($('<div></div>').text(item.title));
    });
}
person Conor Pender    schedule 31.05.2012