Skip to main content
 首页 » 编程设计

jquery之当 HTTP 代码错误时如何解析 JSON Web 服务器响应

2026年07月24日13虾米姐

设置

在我维护的 Web 应用程序中,有很多 AJAX 调用来提交如下所示的表单:

jQuery.post($form.attr("action"), $form.serialize()) 
    .always(commonProcessing) 
    .done(function() { 
        // the post succeeded, do something specific (e.g. close a dialog) 
    }); 

commonProcessing函数在 JSON 响应中查找“众所周知”的部分并采取适当的操作(响应还可能包括请求特定的信息)。它的内容是这样的:

function commonProcessing(result, outcome) { 
    switch (outcome) { 
        case "success": 
            if (result.notify) { 
                // show a growl-style notification 
            } 
            else if (...) ; 
            break; 
        case "error": 
            // show a generic "unexpected error" notification 
            break; 
    } 
} 

问题

在许多情况下,我更愿意返回一个 HTTP 错误代码——例如,对于包含无效数据的提交表单,返回 400——因为,除了这是事物的自然顺序之外,它还允许我方便地将.done 中的“请求成功”代码处理程序(如果返回 200 OK,则始终会解析内容,但 .done 处理程序需要尝试找出这是“错误”还是“确实正常”响应)。同时,我希望在发生错误时使用特定信息来响应请求(例如 notify 对象可以包含一条错误消息,准确解释请求出了什么问题)。

问题在于,当返回 HTTP 错误代码时,jQuery 不会尝试解析响应内容,在这种情况下 result参数是一个 jqXHR 对象,而不是典型的解析 JSON。

有没有一种优雅的方式来表达“我知道有错误,但我也希望你解析响应内容”?我当然可以$.parseJSON(result.responseText)因为我们正在谈论 JSON,但这感觉很笨拙,因为它回避了所有好的 jQuery code嗅探内容类型并进行解析。

请您参考如下方法:

使用 try/catch 代码块怎么样?

try{  
     var response = $.parseJSON(response) etc  
} 
catch(error){  
     console.log(error) //error handling here 
} 

这就是我用来解释响应不是预期的 JSON 格式而是某种错误代码的情况。如果我误解了这个问题,请提前道歉!