jQuery是否有成功和错误之前触发的ajax的完整方法?

时间:2015-03-20 05:55:46

标签: jquery ajax

jQuery是否为成功和错误方法之前触发的ajax提供了“完整”方法?我需要的东西无论返回代码如何都会运行,但在其他任何东西之前都会触发。

2 个答案:

答案 0 :(得分:0)

http://api.jquery.com/jquery.ajax/

  

完整

     

类型:函数(jqXHR jqXHR,String textStatus)

     

请求完成时要调用的函数(执行成功和错误回调之后)。该函数传递两个参数:jqXHR(在jQuery 1.4.x,XMLHTTPRequest)对象和一个字符串,用于对请求的状态进行分类(“成功”,“未修改”,“nocontent”,“错误”,“超时”,“中止“,或”parsererror“)。从jQuery 1.5开始,完整的设置可以接受一系列函数。每个函数将依次调用。这是一个Ajax事件。

     

jqXHR.always(function(data | jqXHR,textStatus,jqXHR | errorThrown){});   完整回调选项的替代构造,.always()方法替换了不推荐使用的.complete()方法。

     

弃用注意:自jQuery 1.8起,不推荐使用jqXHR.success(),jqXHR.error()和jqXHR.complete()回调。要准备最终删除的代码,请改用jqXHR.done(),jqXHR.fail()和jqXHR.always()。

var jqxhr = $.ajax( "example.php" )
  .done(function() {
    alert( "success" );
  })
  .fail(function() {
    alert( "error" );
  })
  .always(function() {
    alert( "complete" );
  });

所以要回答你的问题,没有方法在成功/失败/总是回调之前被调用。

您可以做的是围绕标准回调包装您自己的方法,以便您的代码在成功/失败/始终运行之前运行。

var jqxhr = $.ajax( "example.php" )
  .done(beforeDone(function() {
    alert( "success" );
  }))
  .fail(beforeDone(function() {
    alert( "error" );
  }))
  .always(beforeDone(function() {
    alert( "complete" );
  }));

function beforeDone(fn) {
    return function() {
        console.log('called before success/fail/always');

        fn.apply(fn, arguments); // call default success/fail/always callback
    }
}

答案 1 :(得分:-1)

尝试beforeSend

$.ajax({
url : 'my_action',
dataType: 'script',
beforeSend : function(xhr, opts){
    if(1 == 1) //just an example
    {
        xhr.abort();
    }
},
complete: function(){
    console.log('DONE');
}

});