我有一段 JavaScript 代码,在某个时刻,我想暂停执行,直到 ajax 通信完成后再继续。
我有以下内容
var set_ajax_done = function(){
ajax_done = true;
}
// Ajax part
ajax_done = false;
$.ajax({
url: $url,
type: 'GET',
success: function (result) {
// some treatment
set_ajax_done();
}
});
// Make sure the ajax communication and treatment are done before continuing
make_sure_aj_comm_finished();
var make_sure_aj_comm_finished = function(){
if ( ajax_done == false )
{
setTimeout(function(){
make_sure_aj_comm_finished();
}, 500);
}
}
当我执行此代码时,似乎执行只是进行,并不等待 bool 变量 ajax_done 为 true。
我如何使代码递归执行make_sure_aj_comm_finished
直到变量ajax_done为true
谢谢!
最佳答案
重申一下,通常您不想尝试将异步 js 转换为同步。
但是如果您必须这样做,您可以通过将您想要在 ajax 调用完成后执行的内容放入一个大函数中来完成您想要做的事情,并在 Ajax 函数的成功回调中调用该函数。不需要为此搞乱设置超时/递归的东西。
即:
$.ajax({
url: $url,
type: 'GET',
success: function (result) {
// some treatment
everything_after_ajax();
}
});
关于javascript - 如何使 setTimeout 表现得像等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32831042/