jquery ajax同步调用beforeSend

Dan*_*iel 11 javascript ajax jquery

我有一个叫做的函数:

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 
     }
   }
  );
}
Run Code Online (Sandbox Code Playgroud)

在代码中,我多次调用"callAjax"X次,我想同步更新数据.它按预期完成,但有一个问题:loading项目没有显示在beforeSend函数中.如果我将async变为true,它可以正常工作,但更新不会同步完成.

我尝试了几件事但没有成功.我尝试在ajax调用之前加载加载指示器,如下所示:

function callAjax(url, data) {
  // show loading div

  $.ajax(
    {
      // same as above
    }
   );
}
Run Code Online (Sandbox Code Playgroud)

但由于某种原因,它不想显示加载指标.当我在beforeSend中输入"alert"并且在那种情况下出现加载指示符时,我注意到一个奇怪的行为,但我宁愿不弹出一个消息框.

有什么想法吗?

Poi*_*nty 5

进行这样的同步调用就像放置一个“alert()”框。一些浏览器会完全停止正在执行的操作,直到收到 HTTP 响应。

因此,在您的代码中,在您开始调用“$.ajax()”函数之后,在收到响应之前什么也不会发生,并且就您的代码而言,接下来的事情将是“成功”处理程序。

通常,除非您对自己的服务器非常有信心,否则最好使用异步调用。当您这样做时,浏览器会立即返回其工作,并在后台监听 HTTP 响应。当响应到达时,您的成功处理程序将被调用。