[英]wait ajax finish in a function
我有一個函數為foo的對象,其中包含jQuery ajax調用
foo: function() {
...
jQuery.ajax({
contentType : "application/json",
type: "POST",
async: true,
...,
success: function(data) {
globalVariable = 1;
},
error: function(error) {
}
});
}
我的測試代碼:
var pass = true;
myObj.foo();
if (globalVariable !== 1) {
pass = false;
}
我也希望語句myObj.foo()
用ajax finish完成。 如果ajax沒有完成,則globalVariable
不等於1。
我無法在ajax中將async
設置為false
,因為這是生產代碼。
您的函數正在運行。 只是它運行異常。 如果要在foo()運行時停止其他進程,請將async設置為false 。
foo: function() {
...
jQuery.ajax({
contentType : "application/json",
type: "POST",
async: false,
...,
success: function(data) {
globalVariable = 1;
},
error: function(error) {
}
});
}
如果是這種情況,請向foo添加一個函數參數。 在ajax調用完成后,將調用該函數。
var bar = function(){
pass=true;
}
然后foo將成為
foo: function(func) {
...
jQuery.ajax({
contentType : "application/json",
type: "POST",
async: false,
...,
success: function(data) {
globalVariable = 1;
func();
},
error: function(error) {
}
});
}
呼叫foo
var pass = false;
myObj.foo(bar);
代碼段遵循promise
方法:
var pass = true;
var myObj = {
foo: function () {
return $.Deferred(function (deferred) {
jQuery.ajax({
type: "POST",
url: 'https://httpbin.org/post'
}).done(function () {
deferred.resolve(1);
}).fail(function () {
deferred.reject();
});
}).promise();
}
};
myObj.foo().done(function (globalVariable) {
if (globalVariable !== 1) {
pass = false;
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.