Javascript等待功能响应

时间:2010-09-02 07:01:14

标签: javascript ajax

我有以下代码:

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.. }

};

4 个答案:

答案 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请求来锁定浏览器,从而实现它,但这是一个糟糕的主意。

当您在事件驱动的编程环境中工作时,学会喜欢事件驱动的编程。