小编典典

您如何处理AJAX调用中的错误?

ajax

假设我有以下jQuery AJAX调用:

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

现在,当进行此AJAX调用时,我希望服务器端代码通过一些错误处理检查来运行(例如,用户是否仍在登录,他们是否有权使用此调用,数据是否有效,等等)。如果检测到错误,如何将错误消息冒泡回客户端?

我最初的想法是返回一个带有两个字段的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
       }
   }
 });

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


阅读 160

收藏
2020-07-26

共1个答案

小编典典

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

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

jQuery docs Ajax /
jQuery.ajaxSetup

将错误从服务器端冒泡(使用php)到客户端的最佳方法是通过Ajax请求在400的某个位置发送标头(始终与错误相关)。一旦Ajax请求收到此请求,它将触发您的错误功能。这也意味着您不必定义错误:在每个$
.ajax调用中调用。

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

引用w3.org标头信息

错误4xx,5xx 4xx代码用于客户端似乎已出错的情况,而5xx代码用于服务器知道服务器已出错的情况。
通常无法区分这些情况,因此区别仅是信息性的。正文部分可能包含以人类可读形式描述错误的文档。该文档为MIME格式,并且只能是text / plain,text
/ html或请求中指定的可接受格式之一。

2020-07-26