你如何处理来自AJAX调用的错误?
比方说,我有以下的jQuery AJAX调用:你如何处理来自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
}
}
});
这感觉有点笨重给我,但很有效。有更好的选择吗?
就个人而言,我在我的库类似的代码下面的代码。
$.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');
错误4XX,5XX 的4XX代码用于在客户端似乎出现了偏差的情况下,以及在该服务器是知道的情况下,5XX码服务器发生了错误。一般不可能区分这些情况,所以区别仅仅是信息性的。 正文部分可能包含描述人类可读形式的错误的文档。该文档采用MIME格式,并且只能以text/plain,text/html格式或在请求中指定为可接受的格式之一。
不是jQuery ajax函数最后接受一个参数,一个回调失败的调用吗?如果是这样,只需在成功回调后添加fail:function(...){..}
即可。
使用HTTP错误返回服务器端的错误代码最好等同于错误是什么。然后使用错误回调。这也可以让你显示你的网络服务器给出的错误。
$.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.
}
});
这是非常晚来回答这个问题,但我认为这将是对某一使用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的then
承诺回调
sendAjaxRequest(URL, dataToSend)
.then(
(success) => {
},
(error) => {
}
);
将基于从服务器接收到的响应调用成功或错误的功能。
我相信也有一个“错误”。 – BobbyShaftoe 2009-01-02 18:19:48
是的,有一个“错误”回调,其工作方式与“成功”回调相同。但是,我不确定是否返回HTTP错误是最好的方法。 – 2009-01-02 18:27:50