7

我有一个发布请求,例如

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

如果 .done() 方法中的代码(注释 'yyy')与失败方法中的代码相同(注释 'yyy'),如何避免发布请求中的代码重复?

4

4 回答 4

8

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

function ajaxFailed() {
    // yyy
}

$.post("test", {
    ajax: "true",
    action: ""
}).done(function(data){
    if (data == "ok"){
        //xxx
    } else if (data == "err"){
        ajaxFailed();
    }
}).fail(ajaxFailed);
于 2012-12-20T09:53:16.803 回答
4

您可以使用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
    }
});
于 2012-12-20T10:11:44.660 回答
1

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

function onErr() { 
    //yyy
}
$.post("test", {
    ajax: "true",
    action: ""
}).done(function(data){
    if (data == "ok"){
        //xxx
    } else if (data == "err"){
        onErr();
    }
}).fail(onErr);
于 2012-12-20T09:54:06.663 回答
0

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

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

...

.done(function(){
   //xxx
}).fail(function(){
   //yyy
});
于 2012-12-20T10:09:49.337 回答