2011-11-10 41 views
3

下面是我的代碼的jQuery無法處理404錯誤與Twitter的API

var tweetid = '133450847156838400'; 
     $.ajax({ 
       dataType: "jsonp", 
       url: "http://api.twitter.com/1/statuses/show/"+tweetid+".json?include_entities=1&callback=?", 
       error:function(xhr, testStatus, error) { 
        alert("error"); 
       }, 
       success: function(html){ 
        alert("success"); 
       } 
      }); 

Chrome的控制檯顯示我的404錯誤響應,但jQuery是不能夠觸發警報。

我加

 $(document).ajaxError(function(event, request, settings){ 
      alert('error'); 
     }); 

沒有任何反應。有人可以幫助我處理這個錯誤,因爲我必須檢測這條推文是否被刪除。

+0

請參閱我的回答[如何在jQuery中調用404上的函數ajax請求? ] [1]瞭解如何解決這個問題。 [1]:http://stackoverflow.com/a/12093152/128280 –

回答

2

我很確定(不完全),dataType jsonp沒有正確處理非200 http狀態碼。原因是在jsonp實際工作。維基百科頁面更好地解釋了它:http://en.wikipedia.org/wiki/JSONP,但基本上,jsonp等於使用您提供的url將腳本元素附加到頁面上。腳本元素的主體是一個函數調用。如果你得到任何狀態碼!= 200,那麼這個主體將不會在那裏,並且不會調用任何函數(它最終調用回調函數)。

所以,如果你繼續使用jsonp,那麼你將需要在等待響應時有某種超時,並期望請求失敗或其他方法。

+0

有沒有其他方法?我在瀏覽器控制檯日誌中看到404狀態錯誤。沒有辦法獲得這樣的狀態響應。即每當它發生時捕獲404錯誤。 –

1

jQuery.fn.ajax()頁面說明在使用jsonp時不會調用error: fxn()。這裏是blurb:

注意:此處理程序不被調用的跨域腳本和JSONP 請求。這是一個Ajax事件。

我在這種情況下聽到的唯一解決方案是利用代理,它繞過了same origin policy,並允許您利用錯誤回調。我從來沒有嘗試過這個,雖然,並沒有資格給你如何做到這一點的建議;)

+0

你的意思是說從服務器獲取推文並將其扔在瀏覽器上? 這是一個很好的建議,我想這樣做,但Twitter的每小時有api限制150推文。在提取推文客戶端意味着每個用戶150,但從服務器提取意味着150總體。這是主要問題。 –