Javascript等待函数响应

Javascript等待函数响应,javascript,ajax,Javascript,Ajax,我有以下代码: myFunc(); bar(); myFunc()正在发出ajax请求 在myFunc()的请求完成之前,我不想执行bar() 我也不想将对bar()的调用移动到myFunc内部 可能吗 编辑 以下是我最后得到的代码: var FOO = { init: function(blah) { // Callbacks to pass to the AJAX challenge data load var callbacks = { myFunc1: functio

我有以下代码:

myFunc();
bar();
myFunc()正在发出ajax请求

在myFunc()的请求完成之前,我不想执行bar()

我也不想将对bar()的调用移动到myFunc内部

可能吗

编辑

以下是我最后得到的代码:

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

};

不,不可能,除非您使用的同步请求不再是AJAX,我不建议您这样做,因为它将冻结UI,直到请求完成,用户不喜欢浏览器冻结。

不,这是不可能的

您可以通过发出SJAX请求而不是AJAX请求来锁定浏览器,但这是一个糟糕的想法


当您在事件驱动编程环境中工作时,要学会热爱事件驱动编程。

如果您可以添加一种标志,指示myFunc()已完成其请求,您可以这样做,但这不是一个好主意-最佳做法是使用回调

请尝试以下代码:

var successRequest = false;
myFunc(); // when get the response set successRequest to true

var interval = setInterval(function() {
    if (successRequest) {
        clearInterval(interval);
        bar();
    }
}, 100);

为了完成您正在寻找的任务,您必须找到bar()与myFunc()通信的方法

当您说不想在myFunc()中移动对bar()的调用时,可以用几种方式来解释

例如,可以使bar()成为myFunc()的参数

我希望这对你有帮助


杰罗姆·瓦格纳(Jerome Wagner)

Jan和杰罗姆都有正确的答案,就个人而言,我倾向于杰罗姆,因为这是JavaScription中做事情的典型方式。你为什么要重新发明轮子?没有合理的理由去处理所有跨浏览器的怪癖,而不是使用支持回调的预制Ajax库。我只是不知道我在做什么,句号。杰罗姆的建议很有效。请参阅编辑部分,了解我的结论:我认为这很理想……setInterval是否作为全局工具工作?我的意思是,如果我在某个函数中设置间隔,如果我在另一个函数中重置它(或者在同一个函数中使用新的重写),它是否理解其他的设置间隔?
function bar() {
   // do what bar() does
}

function myFunc(callback) {
   // use callback in the onreadystatechange property of the xmlhtprequest object
}

myFunc(bar)