jQuery是否为成功和错误方法之前触发的ajax提供了“完整”方法?我需要的东西无论返回代码如何都会运行,但在其他任何东西之前都会触发。
答案 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');
}
});