【发布时间】:2011-02-11 15:49:49
【问题描述】:
我有一个函数叫做:
function callAjax(url, data) {
$.ajax(
{
url: url, // same domain
data: data,
cache: false,
async: false, // use sync results
beforeSend: function() {
// show loading indicator
},
success: function() {
// remove loading indicator
}
}
);
}
在代码中,我调用“callAjax”X 次,我想同步更新数据。它按预期完成,但有一个问题:加载项未显示在 beforeSend 函数中。如果我将 async 设置为 true,它可以工作,但更新不会同步完成。
我已经尝试了几件事,但都没有成功。我尝试将加载指示器放在 ajax 调用之前,如下所示:
function callAjax(url, data) {
// show loading div
$.ajax(
{
// same as above
}
);
}
但由于某种原因,它不想显示加载指示器。当我在 beforeSend 中放置“警报”并且在这种情况下出现加载指示器时,我注意到一个奇怪的行为,但我宁愿不弹出消息框。
有什么想法吗?
【问题讨论】:
-
如果你是同步做的,那么浏览器在更新页面之前正在等待响应。
-
即使我将加载指示器放在 ajax 调用之前,它会停止吗?我不确定我是否遵循它的执行路径。我假设在 ajax 调用之前对页面所做的任何更新都将完成。
-
取决于浏览器;你用什么浏览器测试?
-
另外,如果您正在执行同步调用,那么无论如何使用“beforeSend”也没多大意义。
-
我在 Chrome、FF 和 IE 中都试过了。在 FF 上,它按预期工作。在 IE 和 Chrome 上,它会锁定它而不显示任何内容。我尝试将加载指示器放在 ajax 调用之前(不是在 beforeSend 中,而是完全在 ajax 调用之外),但它仍然没有显示。我会假设在 ajax 之前进行的任何调用都会出现在浏览器上?
标签: javascript jquery ajax