the*_*ack 90 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');
}
Run Code Online (Sandbox Code Playgroud)
我试过了什么?
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);
}
}?
Run Code Online (Sandbox Code Playgroud)
仍然无法得到想要的结果.我在这里做错了吗?这不是办法吗?
我想要的结果应该是这样的
Pass1
Pass2
Run Code Online (Sandbox Code Playgroud)
因为需要AJAX调用所以无法做任何小提琴
编辑:许多人建议回调.. somewait()我知道他们..但是旁边的代码仍然会被执行...我希望浏览器完全停止执行代码,somewait()直到ajax调用..这也许是一个不好的做法但值得知道并尽可能尝试......
Dog*_*ert 56
使用回调.这样的事情应该基于您的示例代码.
function someFunc() {
callAjaxfunc(function() {
console.log('Pass2');
});
}
function callAjaxfunc(callback) {
//All ajax calls called here
onAjaxSuccess: function() {
callback();
};
console.log('Pass1');
}
Run Code Online (Sandbox Code Playgroud)
这将Pass1立即打印(假设ajax请求至少需要几微秒),然后Pass2在onAjaxSuccess执行时打印.
Ale*_*der 17
为什么它不适合你使用Deferred Objects?除非我误解了一些可能对你有用的东西.
/* AJAX success handler */
var echo = function() {
console.log('Pass1');
};
var pass = function() {
$.when(
/* AJAX requests */
$.post("/echo/json/", { delay: 1 }, echo),
$.post("/echo/json/", { delay: 2 }, echo),
$.post("/echo/json/", { delay: 3 }, echo)
).then(function() {
/* Run after all AJAX */
console.log('Pass2');
});
};?
Run Code Online (Sandbox Code Playgroud)
根据您的输入,似乎最快的替代方法是使用同步请求.您可以将属性设置async到false您的$.ajax请求,使它们阻塞.这将挂起您的浏览器,直到请求完成为止.
请注意,我不建议这样做,我仍然认为您应该在基于事件的工作流程中修复代码,而不是依赖它.
真正的程序员用信号量来做.
设置变量0.在每次AJAX调用之前递增它.在每个成功处理程序中减少它,并测试0.如果是的话,你就完成了.
| 归档时间: |
|
| 查看次数: |
222788 次 |
| 最近记录: |