javascript - 如何在调用 Ajax 等异步调用时让代码等待

标签 javascript jquery

<分区>

我正在寻找这样的东西

function someFunc() {

callAjaxfunc(); //may have multiple ajax calls in this function
someWait(); // some code which waits until async calls complete
console.log('Pass2');

}

function callAjaxfunc() {
  //All ajax calls called here
  console.log('Pass1');

}

我尝试了什么?

1 Jquery.when()

尝试使用它..它工作正常。但不是我想要的方式。 $.when 将等待,但 $.when() 旁边的代码无需等待即可运行。 do callback 中的代码仅在 ajax 调用后运行

2. 带有全局标志的 setTimeOut()

我非常有信心这会奏效。我试过如下。

GlobalFlag = false;

function someFunc()     
    callAjaxfunc(); //may have multiple ajax calls in this function
    setTimeOut(waitFunc, 100); // some  which waits until async calls complete
    console.log('Pass2');
}

function callAjaxfunc() {
    //All ajax calls called here
    onAjaxSuccess: function() {
        GlobalFlag = true;
    };
    console.log('Pass1');    
}

function waitFunc() {
    if (!GlobalFlag) {
        setTimeOut(waitFunc, 100);
    }
}​

仍然无法获得想要的结果。我在这里做错了什么吗?这不是办法吗?

我想要的结果应该是这样的

Pass1
Pass2

因为需要 AJAX 调用,所以无法制作 fiddle

编辑:很多人都在建议回调..我知道它们..但 somewait() 旁边的代码仍然会被执行...我想要浏览器完全停止执行 somewait() 旁边的代码,直到 ajax 调用。这也可能是一种不好的做法,但值得了解并在可能的情况下尝试......

最佳答案

使用回调。根据您的示例代码,这样的事情应该可以工作。

function someFunc() {

callAjaxfunc(function() {
    console.log('Pass2');
});

}

function callAjaxfunc(callback) {
    //All ajax calls called here
    onAjaxSuccess: function() {
        callback();
    };
    console.log('Pass1');    
}

这将立即打印 Pass1(假设 ajax 请求至少需要几微秒),然后在执行 onAjaxSuccess 时打印 Pass2

关于javascript - 如何在调用 Ajax 等异步调用时让代码等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14031421/

相关文章:

javascript - 如何在 AngularJS 中以复杂的方式绑定(bind)(?)多个变量?

javascript - 有什么方法可以在不触发 Change 事件的情况下重新填充 Html Select 的选项(使用 jQuery)?

javascript - jQuery .hover() 仅适用于 FireFox

jquery - jQuery 中的循环遍历?

javascript - 成功后弹出消息窗口并禁用“提交”按钮

javascript - IE9 兼容模式下的 XMLSerializer 不起作用

javascript - 用循环替换多个 if 语句?

javascript - 改变多个元素的样式

javascript - 如何将事件绑定(bind)到动态添加的文本框?

javascript - 如何使用javascript将泰文日期格式转换为英文?