Javascript JQuery.$。post request.done().fail()避免代码重复
我有一个像这样的帖子请求Javascript JQuery.$。post request.done().fail()避免代码重复,javascript,jquery-ui,jquery,jquery-plugins,Javascript,Jquery Ui,Jquery,Jquery Plugins,我有一个像这样的帖子请求 $.post("test", { ajax: "true", action: "" }).done(function(data){ if (data == "ok"){ //xxx } else if (data == "err"){ //yyy } }).fail(function(){ //yyy }); 如果.done()方法(注释'yyy')中的代码与fail方法(
$.post("test", {
ajax: "true",
action: ""
}).done(function(data){
if (data == "ok"){
//xxx
} else if (data == "err"){
//yyy
}
}).fail(function(){
//yyy
});
如果.done()方法(注释'yyy')中的代码与fail方法(注释'yyy')中的代码相同,如何避免post请求中的代码重复 最明显、最简单的解决方案是简单地进行如下故障回调:
function ajaxFailed() {
// yyy
}
$.post("test", {
ajax: "true",
action: ""
}).done(function(data){
if (data == "ok"){
//xxx
} else if (data == "err"){
ajaxFailed();
}
}).fail(ajaxFailed);
让他们调用相同的函数,例如
function onErr() {
//yyy
}
$.post("test", {
ajax: "true",
action: ""
}).done(function(data){
if (data == "ok"){
//xxx
} else if (data == "err"){
onErr();
}
}).fail(onErr);
另一种方法是稍微更改协议,并使用来表示成功或失败:
if($sqlError){
header("HTTP/1.1 503 Service unavailable");
}
您可以使用回调方法,请求将始终进入该块。正如您所知,当数据包含错误和不包含错误时,此方法将适用于服务器端错误。您可以通过定义最后一个else块来捕获客户端错误
$.post("test", {
ajax: "true",
action: ""
}).always(function(data){
if (data == "ok"){
//xxx
} else if (data == "err"){
//handle server-side errors
} else {
//handle client-side errors like 404 errors
}
});
如果服务器是您的,为什么不在出错时发送一个不同的HTTP头呢?谢谢,但我正在寻找一个稍微不同的解决方案。如果我有一些post请求,错误处理会有点不同。我不想为每个错误处理创建一个新函数。@crmk_ГБПССППССПСССПССССПССССПССССССССССССССС请把你的名字改成我键盘上的名字。否则很难通知您。我认为当请求失败时,您不会得到
data==“err”
。我非常确定data==“err”
是用于服务器端请求失败时,而不是客户端。就像JanDvorak说的,你说得对。data==“err”将适用于服务器端错误。我添加了最后一个else块来捕获客户端错误。
$.post("test", {
ajax: "true",
action: ""
}).always(function(data){
if (data == "ok"){
//xxx
} else if (data == "err"){
//handle server-side errors
} else {
//handle client-side errors like 404 errors
}
});