2013-02-11 51 views
0

不知道我在這裏錯過了什麼,如果你看看這段代碼 - 你會看到我正在對flickr進行jsonp調用並獲得成功的響應。但是,jQuery總是調用「失敗」方法而不是成功方法。爲什麼jQuery說我的ajax jsonp調用失敗?

爲什麼?

{{EDITED}}

$.ajax({ 
     url: 'http://api.flickr.com/services/feeds/photos_public.gne?format=json&tags=fun&tagmode=any', 
     dataType: 'jsonp' 
    }) 
    .done(function(data, status) { 
    console.log('data count:', data.query.results.json.json.length); 
    $('#result-count').text(JSON.stringify(data.query.results.json.json)); 
    }) 
    .fail(function(xhr, err) { 
    console.log('Sample of error data:', err); 
    console.log("readyState: "+xhr.readyState+"\nstatus: "+xhr.status+"\nresponseText: "+xhr.responseText); }); 
    }); 
+1

爲什麼'async:false'?這就是'AJAX'中的'A'所代表的! – 2013-02-11 18:28:24

回答

2

它的失敗,因爲你使用了錯誤的JSONP回調。

... 
type: 'GET', 
jsonpCallback: 'jsonFlickrFeed' 
... 

此外,在最新版本的jQuery,JSONP請求不會觸發fail回調的錯誤,async:false爲JSONP請求忽略,crossDomain是沒有必要的(jQuery的設置,對於你)。

+0

嗨,是的,我試圖改變回調函數的名稱,但我看到如何不能工作。所以如果flickr返回一個有效的jsonp響應,那麼爲什麼FAIL回調總是被調用? – TylerNZ 2013-02-11 18:56:59

+0

我不知道,第三個理由告訴你什麼?你在控制檯中得到什麼?所有的信息都在你的瀏覽器中,你只需要訪問它。在'.fail'裏面有'console.log(arguments)',它會給你3個參數,第三個很可能是「parseerror」,表明返回的jsonp不是jQuery所期望的。然而,由於發送jsonp請求的性質,它可能不是非常有用。如果它失敗了,你真的應該在你的控制檯中得到一個javascript錯誤。 – 2013-02-11 18:59:12

+0

@TylerNZ另請參閱編輯。你不能發佈jsonp。 – 2013-02-11 19:02:05