【问题标题】:jQuery Ajax request async falsejQuery Ajax 请求异步 false
【发布时间】:2016-10-22 15:54:46
【问题描述】:

如果我发送如下 ajax 请求,我想知道为什么会出现此错误:

$.ajax({
    url: "testOperation.php",
    async: false,
    data: compareHeure,
    success: function (data, statusRequest) {
})

错误:

主线程上的同步 XMLHttpRequest 已被弃用,因为 其对最终用户体验的不利影响。如需更多帮助, 检查https://xhr.spec.whatwg.org/。

有问题吗?

谢谢,

【问题讨论】:

  • 为什么需要同步 ajax?这是警告而不是错误。
  • 明确说明 同步 XMLHttpRequest 线程已弃用

标签: javascript jquery ajax


【解决方案1】:

我想知道为什么会出现这个错误

简短的回答是因为 ajax 中的这个选项:

async: false,

对于您当前遇到的问题,可能还有其他更好的解决方案。如果您发布更多关于为什么需要使用同步 ajax 的详细信息?


要么这样用:

$.ajax({
   url:'',
   type:'post',
   success:function(data){
       // make another ajax call here then    
   }
})

你可以使用jQuery.when()

$.when( $.ajax("/page1.php"), $.ajax("/page2.php") ).done(function(a1, a2) {
    // here you can get both ajax response when both gets completed.
    console.log(a1);
    console.log(a2);
});

这里 .done() 仅在两个 ajax 都完成时执行。

【讨论】:

  • 你知道我是 jquery ajax 的初学者,我想执行更多请求,但在发送第二个请求之前我需要第一个请求的响应。这就是为什么异步:false
  • 那你为什么不使用PromisejQuery.when() 呢?
【解决方案2】:

主线程上的同步 XMLHttpRequest 已被弃用,因为它会对最终用户的体验产生不利影响。如需更多帮助,请查看https://xhr.spec.whatwg.org/

这只是一个警告,与你的代码不工作无关

您的代码中有语法错误并且缺少}

$.ajax({
    url: "testOperation.php",
    async: false,
    data: compareHeure,
    success: function (data, statusRequest) {
    }
});

【讨论】:

    【解决方案3】:

    您会收到警告,因为 Synchronous XMLHttpRequest 阻止了 UI 威胁,并且通常不是一个好的选择(实际上它已被弃用)。

    阻止 UI 威胁会使任何用户交互延迟和草率,可能导致浏览器挂起一段时间。

    尽可能将 AJAX 与异步调用一起使用,并使用回调或承诺来检测调用何时具有状态:成功、进度或被拒绝(失败)。

    例子:

    https://jsfiddle.net/sb11heds/

      var jqxhr = $.ajax( "https://fiddle.jshell.net/favicon.png" )
      .done(function() {
        alert( "success" );
      })
      .fail(function() {
        alert( "error" );
      })
      .always(function() {
        alert( "complete" );
      });
    
     jqxhr.always(function() {
      alert( "second complete" );
    })
    

    【讨论】:

      【解决方案4】:

      正如其他人所说,同步 XMLHttpRequest 线程已弃用

      我认为您正在避免使用 Async,因为您可能正在等待调用完成然后执行其他操作。您可以改用 .done 之类的回调:

      $.ajax({
          url: "testOperation.php",
          data: compareHeure,
          success: function (data, statusRequest) {
          }
      }).done(function(data){
        // Do another Ajax or something with the data returned from the Ajax call
      })
      

      【讨论】:

        【解决方案5】:

        不推荐使用同步 AJAX 调用,因为它们可能会在页面内容加载中产生一些问题。

        这也可能导致可视化设计失真,因此使用同步 AJAX 不是一个好习惯,并且将来可能无法使用。

        【讨论】:

          【解决方案6】:

          检查您的 AJAX 调用是否明确设置为 false (async: false)(默认为 true - 这是正确的处理方式),如果没有,那么您的浏览器上可能运行了一些扩展做一个同步回调。识别的简单方法是在 Chrome 中打开控制台,启用“Log XMLHttpRequests”,您将能够看到导致报告问题的扩展程序。希望这会有所帮助。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-10-13
            • 2010-11-06
            • 1970-01-01
            • 2023-04-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-05-03
            相关资源
            最近更新 更多