2013-02-11 92 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