2012-08-24 28 views
1

我大部分時間都在嘗試使用JQuery中的'getJSON'方法來對付Flickr API。我設法看了一些JQuery文檔中的例子,並設法讓它們工作,但是嘗試從我的自定義API調用中讀取JSON失敗了。getJson與自定義的Flickr API調用會生成一個分析錯誤

摘錄:

這工作:

//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並遍歷嵌套數組中的每個「照片」對象,以便在迭代期間可以輕鬆訪問其子屬性,如下所示:

[photo-instance ] .id

[照片實例] .owner

[照片實例] .secret 等等

任何幫助將不勝感激。

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

注意:所有的API密鑰用於測試,不久將被破壞。

回答

2

Jquery documentation

如果URL中包含字符串 「?回調=」 (或類似的,由服務器端API定義的 ),請求將被視爲JSONP。有關更多詳細信息,請參閱$ .ajax()中有關jsonp數據類型的 討論。

當你的URL中包含callback=?,jQuery的getJSON功能正在等待(動態指定)一個回撥電話,JSONP風格。但是當你在URL中指定nojsoncallback,服務器會發送一個標準的JSON的內容,如文檔中指定的您提供:

如果你只是想生JSON,無功能的包裝,用添加 參數nojsoncallback值1爲您的要求。

從您的URL中刪除callback=?,你應該沒問題。

+0

非常感謝您!我刪除了回調=?現在我有這些對象並可以遍歷它們(data.photos.photo)。我認爲JSONP總是用於跨域Ajax?我仍然困惑爲什麼你想要回調=?在那裏,爲什麼不檢索所有數據並從那裏出發?再次感謝你! :) – Dal

+0

如果服務器通過設置特殊標頭接受它,則可以執行跨域JSON(而不是JSONP)。請參閱https://developer.mozilla.org/en-US/docs/HTTP_access_control。對於現代瀏覽器和服務器,我認爲JSONP不再有什麼意義,但是這些頭文件有點「新」。 –