2012-08-22 118 views
1

我正在測試jQuery ajax請求的錯誤回調,我有一個問題。下面是我的Ajax請求jQuery ajax請求錯誤回調

$.ajax({ 
    type:'get', 
    url:'non-existant-file.php', 
    data: { newFile : $('#name').val() }, 
    beforeSend: function() { 
     // make nice image to show the request is running 
    }, 
    success: function() { 
     // show results of successfull request 
    }, 
    error: function(jq,status,message) { 
     alert('A jQuery error has occurred. Status: ' + status + ' - Message: ' + message); 
    } 
}); 

該文件不存在,測試時引發錯誤的唯一目的。我期望它返回一個404作爲狀態,並且'File not found'作爲消息。 ATLEAST,這就是我所理解的是,當我讀了docs

Possible values for the second argument (besides null) are "timeout", "error", "abort", and "parsererror". When an HTTP error occurs, errorThrown receives the textual portion of the HTTP status, such as "Not Found" or "Internal Server Error." As of jQuery 1.5, the error setting can accept an array of functions. Each function will be called in turn.

但是,我得到的警告沒有像我所期待的:

A jQuery error has occurred. Status: error - Message: undefined 

我是理解的文檔錯誤還是我只是不正確?

+0

你在的情況下,應用程序中有一個錯誤頁的URL不存在? – davids

+0

像一個默認的404頁面?那就不要。我不。在鉻錯誤控制檯它只是拋出'GET http://localhost/km/admin/createFile.php?newFile = 404(未找到)',我會想到的是,將返回ajax錯誤的方式。 – Albert

回答

1

我相信它與您的路由服務器如何響應訪問不存在的路由有關。的jsfiddle,例如,將返回一個稍微有用的信息:http://jsfiddle.net/dxSma/

+0

這似乎是最準確的答案。我不知道這一點,而且,這不是我所期望的。感謝您的意見。 – Albert

1

我使用了錯誤的jQuery AJAX處理如下:

error  : function(xhr) { 
    var readyState = { 
     1: "Loading", 
     2: "Loaded", 
     3: "Interactive", 
     4: "Complete" 
    }; 
    if(xhr.readyState !== 0 && xhr.status !== 0 && xhr.responseText !== undefined) { 
     alert("readyState: " + readyState[xhr.readyState] + "\n status: " + xhr.status + "\n\n responseText: " + xhr.responseText); 
    } 
} 

也許這可以給你如何讓它正常工作一對夫婦的提示。

+0

它確實提供了更多信息,並且結構更好,但返回的內容看起來像一個頁面。 http://jsfiddle.net/dxSma/1/爲什麼當所有的工作仍然需要自己完成時,它聽起來很壯觀? – Albert

+0

@DarkRanger我的意圖不是讓它聽起來很壯觀*,這個錯誤函數在ASP.NET WebServices中至少有效 - 帶有正確的responseText。 – sQVe

+0

我知道這不是你的意圖。我的意思是,爲什麼jQuery後面的開發人員會添加一個錯誤回調函數,並且在文檔中,讓它聽起來像你需要的所有東西,而不是它的組成部分?這沒什麼反對你! :P這是更多的一百萬美元的問題。 – Albert

0

你也可以用「全局AJAX事件處理程序」

.ajaxError()我在這裏向您展示的例子,你越能找到工作在這個鏈接上。

http://api.jquery.com/ajaxError/

當一個Ajax請求失敗顯示的消息。

jQuery("#msg").ajaxError(function(event, request, settings){ 
    jQuery(this).append("<li>Error requesting page " + settings.url + "</li>"); 
}); 

,或者您也可以將它像一個老辦法:)

jQuery.ajax({ 
..., 
complete: function(e, XHR, options) { 
    if (XHR.status == 200) { // success 
    } elseif (XHR.status == 500) { // Internal Server Error 
    } elseif (XHR.status == 404) { // File Not found 
} 
}); 
+0

不會說第二部分我說的一樣: 'error:function(xhr){alert(xhr.url +「找不到。」);例如? – Albert

+0

是的butyou可以輸入特定的錯誤代碼的自定義消息,所以它會更可行我想試試看,並讓我知道。 –