你如何处理来自AJAX调用的错误?

假设我有以下jQuery AJAX调用:

$.ajax({ type: "POST", url: "MyUrl", data: "val1=test", success: function(result){ // Do stuff } }); 

现在,当进行这个AJAX调用时,我希望服务器端代码运行一些error handling检查(例如,用户是否仍然登录,他们是否有权使用此调用,数据是否有效等)。 如果检测到错误,如何将该错误消息重新发送回客户端?

我最初的想法是返回一个带有两个字段的JSON对象:error和errorMessage。 然后将在jQuery AJAX调用中检查这些字段:

 $.ajax({ type: "POST", url: "MyUrl", data: "val1=test", success: function(result){ if (result.error == "true") { alert("An error occurred: " & result.errorMessage); } else { // Do stuff } } }); 

这对我来说有点笨拙,但它确实有效。 还有更好的选择吗?

就个人而言,我的库中有以下代码的类似代码。

 $.ajaxSetup({ error: function(xhr){ alert('Request Status: ' + xhr.status + ' Status Text: ' + xhr.statusText + ' ' + xhr.responseText); } }); 

jQuery docs Ajax / jQuery.ajaxSetup

将错误从服务器端(使用php)传递到客户端的最好方法是在400的某处(通常与错误相关联)通过Ajax请求发送标头。 一旦Ajax请求收到此信息,它将触发您的错误function。 这也意味着您不必定义错误:在每个$ .ajax调用中调用。

 header('HTTP/1.0 419 Custom Error'); 

引自w3.org标题信息

错误4xx,5xx 4xx代码用于客户端似乎有错误的情况,5xx代码用于服务器知道服务器出错的情况。 通常不可能区分这些情况,因此差异只是信息性的。 主体部分可以包含描述人类可读forms的错误的文档。 该文档采用MIME格式,可能只能是text / plain,text / html,也可能是请求中指定为可接受的格式。

 $.ajax({ type: "POST", url: "MyUrl", data: "val1=test", success: function(result){ // Do stuff }, error: function(request,status,errorThrown) { // There's been an error, do something with it! // Only use status and errorThrown. // Chances are request will not have anything in it. } }); 

jQuery ajax函数最后是否接受一个参数,一个失败调用的回调? 如果是这样,只需在成功回调后添加fail:function(...){..}

使用HTTP错误在服务器端返回错误代码,最好等同于错误。 然后使用错误回调。 这也可以让您显示网络服务器给出的错误。

回答这个问题已经很晚了,但我认为使用es6和jquery 2.2会对某些人有所帮助。

我通常在我的代码中遵循这个(延迟方法)

 sendAjaxRequest(URL, dataToSend) { return $.ajax({ type : 'POST', url : URL, data : JSON.stringify(dataToSend), dataType : 'json' }).fail((responseData) => { if (responseData.responseCode) { console.error(responseData.responseCode); } }); }, 

我附加了一个延迟fail方法,如果发生某些错误,将调用该方法。 它是错误回调选项的替代构造,.fail()方法替换最新jquery中不推荐使用的.error()方法。

接下来从调用sendAjaxRequest的地方我使用jquery promise回调

 sendAjaxRequest(URL, dataToSend) .then( (success) => { }, (error) => { } ); 

它将根据从服务器收到的响应调用成功或错误函数。