2012-08-24 4 views
1

Я провел большую часть прошлой ночи, пробуя метод getJSON в JQuery против API Flickr. Мне удалось взглянуть на некоторые примеры из документов JQuery и удалось заставить их работать, однако попытки чтения JSON из моих пользовательских вызовов API терпели неудачу.getJson с пользовательским вызовом Flickr API генерирует ошибку parse

Отрывки:

Это работает:

//JQuery Flickr example code - works! 
    $.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?&format=json", 
    function(data) { 
    $.each(data.items, function(i,item){ 
     alert(item.media.m); 
     if (i == 3) return false; 
    }); 
    }); 

Это терпит неудачу!

//Custom Flickr API Call - nothing?fail? 
    $.getJSON("http://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=c258d8ae4c29bb74da198c6ac3874671&text=Mclaren&per_page=3&format=json&callback=?&nojsoncallback=1", 
    function(data) { 

    alert(data); 


    }).error(function(jqXHR, textStatus, errorThrown) { alert(textStatus + errorThrown); }); 

Второй вызов API является допустимым ресурсом, он работает в браузере/стельку и я могу видеть содержимое JSON, но в моем JS кода возникает ошибка

"parsererrorError: jQuery18007627279118169099_1345796861535 was not called". 

В этом точка, в которой я застреваю, в конечном итоге моя конечная цель - обработать возвращенный JSON и повторить каждый объект «фото» во вложенном массиве, чтобы я мог легко получить доступ к своим дополнительным свойствам во время итерации следующим образом:

[фото-экземпляр ] .id

[фото-пример] .owner

[фото-пример] .secret и т.д ...

Любая помощь будет принята с благодарностью.

Ref:http://www.flickr.com/services/api/response.json.html

Примечание: Все ключи API предназначены для целей тестирования и будут уничтожены в ближайшее время.

ответ

2

От Jquery documentation:

Если URL содержит строку "? Обратный вызов =" (или аналогичный, как определено API-интерфейсом на стороне сервера), вместо этого запрос обрабатывается как JSONP. Дополнительную информацию см. В обсуждении типа данных jsonp в $ .ajax().

Как ваш URL содержит callback=?, функция JQuery getJSON ждет (динамически) указанного обратного вызова вызова, JSONP стиле. Но, как указано nojsoncallback в URL, сервер отправляет стандартный JSON контента, как указано в документации, вы предоставляете:

Если вы хотите просто необработанный JSON, без функции обертку, добавьте nojsoncallback параметра с значение 1 по вашему запросу.

Удалите с вас URL-адрес callback=?, и все должно быть в порядке.

+0

Спасибо вам большое! Я удалил callback =? и теперь у меня есть объекты и вы можете проходить через них (data.photos.photo). Я думал, что JSONP всегда использовался для кросс-домена ajax? Я все еще смущен, почему вы хотите обратный вызов =? почему бы не просто получить все данные и перейти оттуда? еще раз спасибо! :) – Dal

+0

Вы можете использовать междоменный JSON (не JSONP), если сервер принимает его, устанавливая специальные заголовки. См. Https://developer.mozilla.org/en-US/docs/HTTP_access_control. Для современных браузеров и серверов я думаю, что JSONP больше не имеет смысла, но эти заголовки любезны «новыми». –

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