设置
在我维护的 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 格式而是某种错误代码的情况。如果我误解了这个问题,请提前道歉!
