JQuery.美元.Post request .done() .fail()避免代码重复

JQuery. $.post request .done() .fail() avoid code duplication

本文关键字:代码 fail request done 美元 JQuery Post      更新时间:2023-09-26

我有一个post request

  $.post("test", {
    ajax: "true",
    action: ""
  }).done(function(data){
    if (data == "ok"){
        //xxx
    } else if (data == "err"){
        //yyy
    }
  }).fail(function(){
    //yyy
  });

如何避免代码重复在post请求如果代码在。done()方法(评论'yyy')相同的失败方法(评论'yyy') ??

最明显和最简单的解决方案是简单地有一个失败回调,如下所示:

function ajaxFailed() {
    // yyy
}
$.post("test", {
    ajax: "true",
    action: ""
}).done(function(data){
    if (data == "ok"){
        //xxx
    } else if (data == "err"){
        ajaxFailed();
    }
}).fail(ajaxFailed);

您可以使用always回调方法,请求将始终在该块中。正如您所知道的,当数据包含错误或不包含错误时,此方法将适用于服务器端错误。您可以通过定义最后的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
    }
});

让它们调用相同的函数,例如

function onErr() { 
    //yyy
}
$.post("test", {
    ajax: "true",
    action: ""
}).done(function(data){
    if (data == "ok"){
        //xxx
    } else if (data == "err"){
        onErr();
    }
}).fail(onErr);

另一种方法是稍微更改协议,并使用HTTP状态码来指示成功或失败:

if($sqlError){
  header("HTTP/1.1 503 Service unavailable");
}

.done(function(){
   //xxx
}).fail(function(){
   //yyy
});