我有一个函数叫做:
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 中放置一个“警报”并且在这种情况下出现加载指示器时,我注意到一个奇怪的行为,但我宁愿不弹出消息框。
有什么想法吗?
最佳答案
进行这样的同步调用就像设置一个“alert()”框。有些浏览器会完全停止它们正在做的事情,直到收到 HTTP 响应。
因此在您的代码中,在您开始调用“$.ajax()”函数后,什么都不会发生,直到收到响应为止,接下来您的代码将是“成功”处理程序。
通常,除非您真的对您的服务器有信心,否则最好使用异步调用。当您这样做时,浏览器会立即返回其工作并在后台简单地监听 HTTP 响应。当响应到达时,您的成功处理程序将被调用。
关于javascript - jquery ajax同步调用beforeSend,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4971062/