JQuery的。 $ .post请求.done()。fail()避免代码重复

时间:2012-12-20 09:51:11

标签: 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方法中相同(注释'yyy'),如何避免post请求中的代码重复?

4 个答案:

答案 0 :(得分:8)

最明显和最简单的解决方案是简单地进行故障回调,如下所示:

function ajaxFailed() {
    // yyy
}

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

答案 1 :(得分:3)

您可以使用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
    }
});

答案 2 :(得分:1)

让他们调用相同的功能,例如

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

答案 3 :(得分:0)

另一种方法是稍微更改协议,并使用HTTP status codes表示成功或失败:

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

...

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