jQuery getJSON никогда не входит в свою функцию обратного вызова - PullRequest
1 голос
/ 16 ноября 2009

Я сижу с этим часами и не могу понять, почему.

  • q работает. URL дает мне правильный JSON-ответ. Он отображается как объекты, массивы и еще много чего на вкладке JSON на вкладке Net в Firebug, и все в порядке. Я также пробовал с другими URL, которые я знаю, работают. То же самое происходит.

  • У меня есть другая функция в другом месте моего крошечного приложения, которая отлично работает, и это почти то же самое, просто другой API и вызывается из других мест. Работает нормально, и переменная data заполняется при входе в функцию getJSON. Здесь data никогда не наполняется ничем.

  • У меня были точки останова на каждой строке в Firebug, без результата. Ничего не произошло. Он просто достигает строки getJSON, а затем переходит к оператору отладчика после функции.

    var usedTagCount = 10;
    var searchHits = 20;
    var apiKey = "a68277b574f4529ace610c2c8386b0ba";
    
    var searchAPI = "http://www.flickr.com/services/rest/?method=flickr.photos.search&" + 
                "format=json&api_key=" + apiKey + "&sort=interestingness-desc&per_page="
                 + searchHits + "&jsoncallback=?&nojsoncallback=1&tags=";
    
    var tagString = "";
    var flickrImageData = new Array();
    
    function search(query) {
        for(var i = 0; i < usedTagCount; i++) {
            tagString += query[i].key + ",";
        }
    
        var q = searchAPI + tagString;
    
        $.getJSON(q, function(data) {   
            debugger; /* It never gets here! */
    
            $.each(data.photos.photo, function(i, item) {
                debugger;
                flickrImageData.push(item);             
            });
        });
    
        debugger;
        return flickrImageData;
    }
    

Пример URL запроса (q):

http://www.flickr.com/services/rest/?method=flickr.photos.search&format=json&api_key=a68277b574f4529ace610c2c8386b0ba&sort=interestingness-desc&per_page=20&jsoncallback=?&tags=london,senior,iphone,royal,year,security,project,records,online,after,

Интересно, поскольку JSONView (плагин Firefox) не может правильно отформатировать его, что на самом деле возвращается не JSON - тип mime - text / html. Firebug, однако, интерпретирует его как JSON (как я уже говорил выше). И все слова тега происходят из другой части приложения.

Ответы [ 2 ]

1 голос
/ 16 ноября 2009

Я думаю, вам может понадобиться удалить

nojsoncallback=1

из строки searchAPI.

Flickr использует JSONP для включения междоменных вызовов. Этот метод требует, чтобы JSON был обернут в обратный вызов json, параметр nojsoncallback = 1 удаляет это обертывание.

РЕДАКТИРОВАТЬ: Очевидно, это работает с nojsoncallback = 1, я получил этот кусок кода для меня. Какую версию JQuery вы используете? JSONP доступен только с версии 1.2 и выше.

Это работает для меня (небольшие изменения):

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">

var usedTagCount = 1;
var searchHits = 20;
var apiKey = "a68277b574f4529ace610c2c8386b0ba";


var searchAPI = "http://www.flickr.com/services/rest/?method=flickr.photos.search&" + 
                    "format=json&api_key=" + apiKey + "&sort=interestingness-desc&per_page="
                     + searchHits + "&jsoncallback=?&nojsoncallback=1&tags=";


var tagString = "";
var flickrImageData = new Array();


function search(query) {
tagString = query;


var q = searchAPI + tagString;


$.getJSON(q, function(data) {   


    $.each(data.photos.photo, function(i, item) {
            debugger;
            flickrImageData.push(item);                          
    });
});

}

search("cat");

</script>
0 голосов
/ 16 ноября 2009

Когда я пытаюсь URL: http://www.flickr.com/services/rest/?method=flickr.photos.search&format=json&api_key=a68277b574f4529ace610c2c8386b0ba&sort=interestingness-desc&per_page=10&tags=mongo

возвращает данные, как и должно быть - попробуйте изменить getJSON на $ .ajax () и определить функцию jsonFlickrApi (data) с кодом у вас есть функция обратного вызова.

Если это не сработает - пожалуйста, отправьте код на jsbin.com <- чтобы мы могли попробовать его вживую - гораздо проще отладить. </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...