2013-05-10 85 views
28

我知道如何接收服務器數據或錯誤。有很多方法。例如:防止未處理的jQuery AJAX錯誤

$.ajax({ 
    type: "get", 
    url: "/widgets/", 
    success: function (data, text) { 
     console.log('this is a data'); 
    }, 
    error: function (request, status, error) { 
     console.log('this is an error'); 
    } 
}); 

請參閱本圖片:

result in chrome developer console

我有我的誤差函數和我做什麼,我需要在那裏。 如何防止第一行中的錯誤。 我已經測試過4xx和5xx錯誤但沒有區別。 我知道最終用戶在隱藏開發者控制檯時看不到這個錯誤。

我需要這個來設計一個API。 我知道,我可以從服務器發送200個迴應與顯示,這是一個錯誤,或者是成功的結果,一個額外的參數。

但如果我可以給4XX或者5XX響應那麼就沒有必要額外的參數。 這種方式對我來說有一些額外的收益。例如,我可以將成功結果應用於我的客戶端模型,而不用擔心其他參數。

謝謝

+0

jQuery的1.9.1.js:8526 '//這可能會引發異常是actually' '//在jQuery.ajax(所以沒有的try/catch在這裏)'' 處理xhr.send( (s.hasContent && s.data)|| null);' – iman 2013-05-10 12:16:37

+4

在'try/catch'中包裝'xhr.send'確實不會**阻止在開發者控制檯顯示錯誤。請注意,這些是* not * JS錯誤/異常,但與瀏覽器發出的* request *有關,所以試圖捕獲JS錯誤將不起作用。 – gkalpak 2013-05-10 14:08:46

+0

嘗試這樣的回答:http://stackoverflow.com/questions/7436195/disabling-some-jquery-global-ajax-event-handlers-for-a-request – JVE999 2014-08-10 23:14:30

回答

12

AFAIK你不能讓紅一樣的東西走開,返回錯誤狀態碼(4XX,5XX)時。它們被瀏覽器用來指示某些事情可能沒有像預期的那樣發生。儘管如此,這些僅僅是裝飾品,因爲4xx和5xx狀態碼完全有效,所以我沒有看到你想要消除它們的理由。

正如你所說,你的另一種選擇是發送「200響應從服務器的額外參數,這表明這是一個錯誤或成功的結果」。

我肯定推薦使用雖然4XX和5XX代碼(這是他們設計的),並停止擔心瀏覽器的對決在開發者控制檯的警告(又名紅一樣的東西)。

另請參閱thisthis提取其他類型資源(圖像,文件等)時引用類似錯誤的問題。您看到的錯誤實際上具有相同的性質。

+2

有一種情況是這將是很好,以避免報告以下錯誤:測試(特別是Web應用程序的無頭測試)。例如,你編寫了一個測試(比如mocha-phantonJS)來查找失敗的ajax請求。令人討厭的是,所有這些錯誤都出現在測試總結中。 – emepyc 2014-03-04 14:20:20

+0

我看到一個檢查,如果一個頁面存在,並且紅色的錯誤使它看起來像出事了,所以這將是很好的壓制它。 – JVE999 2014-08-10 23:12:59

+1

@ JVE999:我的答案成立。不要成爲「紅色恐懼症」! 4xx和5xx是有效的代碼,你無法做任何關於瀏覽器如何選擇登錄它們(也不應該擔心它)。如果你太在意用戶打開控制檯和錯誤判斷你的應用程序,由於紅一樣的東西,也許你可以記錄一些消息來解釋它,並讓他們知道它的預期行爲。 – gkalpak 2014-08-11 05:14:07