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
    }
});