我使用$ .ajax发帖请求。然后,我试图在ajax请求成功或失败之前调用函数。现在我的方法就像跟随
var someCallback = function() {
//do something
};
var Success = false;
$.ajax({
type: "POST",
url: "/some/service",
dataType: "text",
data: JSON.stringify(someData),
contentType: "application/json; charset=utf-8",
success: function (data) {
someCallBack(); //<--- this is the function
Success = true;//doesnt goes here
},
error: function (textStatus, errorThrown) {
someCallBack();
Success = false;//doesnt goes here
}
});
问题是,我需要在ajax请求完成后运行someCallBack(),无论它是成功还是失败,但是在调用成功或错误回调之前。我不想在这种情况下使用ajaxStart和ajaxStop。我看了'完整'回调,但它只在错误或成功后调用。我不想在两个地方调用someCallBack()。任何建议,请。
答案 0 :(得分:2)
AJAX支持beforeSend
$.ajax({
url: "http://example.com",
beforeSend: function( xhr ) {
xhr.overrideMimeType( "text/plain; charset=x-user-defined" );
}
}).always(function() {
callback();
});
我误解了你的问题。我觉得你需要.always()
?
答案 1 :(得分:2)
我认为您正在寻找具有ajax'的deferred always
method界面。之后你可以链接你的成功/错误处理程序 - 尽管你不能使用那些进入选项对象的那些。
$.ajax({
type: "POST",
url: "/some/service",
dataType: "text",
data: JSON.stringify(someData),
contentType: "application/json; charset=utf-8"
})
.always(someCallBack)
.done(function (data) {
var Success = true; // goes here after someCallBack()
})
.fail(function (textStatus, errorThrown) {
var Success = false; // goes here after someCallBack()
});
答案 2 :(得分:0)
$ .ajax返回$ .Deferred(更具体地说是jqXHR),您可以使用它来定义回调。在您的情况下,在ajax设置对象中定义回调的优势在于您的回调将按照定义的顺序执行:
($.Deferred()
的行为就像您的$.ajax(settings)
电话一样)
成功:
$.Deferred()
.always(function() { console.log('always'); })
.done(function() { console.log('done'); })
.fail(function() { console.log('fail'); })
.resolve();
// "always"
// "done"
失败:
$.Deferred()
.always(function() { console.log('always'); })
.done(function() { console.log('done'); })
.fail(function() { console.log('fail'); })
.reject();
// "always"
// "fail"
同样,如果最后定义.always
,它将最后执行:
$.Deferred()
.done(function() { console.log('done'); })
.fail(function() { console.log('fail'); })
.always(function() { console.log('always'); })
.resolve();
// "done"
// "always"
答案 3 :(得分:0)
您只需绑定2个ajax事件:ajaxSend
和ajaxComplete
。
例如
$(document).bind("ajaxSend", function(){
$("#loading").show();
}).bind("ajaxComplete", function(){
$("#loading").hide();
});