javascript - jquery ajax同步调用beforeSend

标签 javascript jquery ajax

我有一个函数叫做:

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/

相关文章:

jquery - 将按钮添加到 jquery ui 对话框

javascript - jQuery ajax async false 修改页面中的html

javascript - 在 window.open() 中打开页面的一部分的任何方式

javascript - Highcharts 边框

javascript - 单击标题外侧的跨度时如何打开 Accordion

javascript - 将第二个 div float 在第一个 div 之上

javascript - 在 Twitter Bootstrap 3 中,按钮(复选框)在取消选中后保持灰色

javascript - 获取位于表单内的第二个输入的值。 javascript 查询

javascript - 如何从 jquery 的 success block 中访问成功数据

ajax - 如何在react中加载AJAX