我有以下代码:
myFunc();
bar();
myFunc()正在发出ajax请求
在myFunc()的请求完成之前,我不想执行bar()。
我也不想将调用移到myFunc里面的bar()。
可能?
修改的
以下是我最终得到的代码:
var FOO = {
init: function(blah)
{
// Callbacks to pass to the AJAX challenge data load
var callbacks = {
myFunc1: function(){ myFunc1(blah); },
myFunc2: function(){ myFunc2(blah); },
};
this.bar(callbacks); // Load the challenge data and setup the game
},
bar: function(callbacks) { ..loop through and execute them.. }
};
答案 0 :(得分:6)
为了满足您的需求,您必须找到 bar()与 myFunc()进行通信的方法。
如果您不想将调用移至 myFunc()中的 bar(),则可以通过多种方式进行解释。
例如,你可以让 bar()参数 myFunc()
function bar() {
// do what bar() does
}
function myFunc(callback) {
// use callback in the onreadystatechange property of the xmlhtprequest object
}
myFunc(bar)
我希望这会对你有所帮助
Jerome Wagner
答案 1 :(得分:1)
如果您可以添加一种标志,表明myFunc()已完成其请求,您可以这样做,但这不是一个好主意 - 最佳做法是使用回调。
试试这段代码:
var successRequest = false;
myFunc(); // when get the response set successRequest to true
var interval = setInterval(function() {
if (successRequest) {
clearInterval(interval);
bar();
}
}, 100);
答案 2 :(得分:0)
不可以,除非您使用不再是AJAX的同步请求,否则我不建议您这样做,因为它会冻结UI直到请求完成并且用户讨厌让浏览器冻结。
答案 3 :(得分:0)
不,这是不可能的。
你可以通过发出SJAX请求而不是AJAX请求来锁定浏览器,从而实现它,但这是一个糟糕的主意。
当您在事件驱动的编程环境中工作时,学会喜欢事件驱动的编程。