Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

I have a post request like

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

How to avoid code duplication in the post request if code in .done() method (comment 'yyy') the same in fail method (comment 'yyy') ??

like image 336
Igor Slipko Avatar asked Dec 20 '12 09:12

Igor Slipko


2 Answers

The most obvious and simple solution would be to simply have a failure callback like so:

function ajaxFailed() {
    // yyy
}

$.post("test", {
    ajax: "true",
    action: ""
}).done(function(data){
    if (data == "ok"){
        //xxx
    } else if (data == "err"){
        ajaxFailed();
    }
}).fail(ajaxFailed);
like image 69
Rudi Visser Avatar answered Nov 04 '22 15:11

Rudi Visser


You can use always callback method, and the request will always go in that block. As you know when data contains error and not, this method will work for server-side errors. And you can catch client-side errors by defining the final else block.

$.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
    }
});
like image 36
halilb Avatar answered Nov 04 '22 17:11

halilb