我有一个包含jQuery ajax调用的函数foo的对象
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完成。如果ajax没有完成,globalVariable
不等于1.
我无法在ajax中将async
设置为false
,因为这是生产代码。
答案 0 :(得分:0)
您的功能正在运行。只是它正在不时地运行。如果您想在foo()运行时停止其他进程,请将 async 设置为 false 。
foo: function() {
...
jQuery.ajax({
contentType : "application/json",
type: "POST",
async: false,
...,
success: function(data) {
globalVariable = 1;
},
error: function(error) {
}
});
}
答案 1 :(得分:0)
如果是这种情况,请向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);
答案 2 :(得分:0)
代码段遵循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;
}
});