【问题标题】:Synchronous XMLHttpRequest on the main thread is deprecated error主线程上的同步 XMLHttpRequest 已弃用错误
【发布时间】:2015-12-20 00:29:54
【问题描述】:

由于某种原因,我的 Angularjs 应用程序出现以下错误:

主线程上的同步 XMLHttpRequest 已被弃用,因为它会对最终用户的体验产生不利影响。

由于我不知道是什么原因造成的,所以我不知道要分享什么代码? 当我导航到一个状态(ui-router)但没有与此状态关联的控制器时,就会出现问题。

有人见过这个吗?

【问题讨论】:

  • 你在某处有同步 AJAX 请求吗?
  • 如果代码不多 - 共享所有代码 ;-) 如果您使用 SCM(例如 git),请共享所有已更改的代码
  • 我认为问题在于您使用的是同步 XMLHttpRequest 并且主线程上的同步 XMLHttpRequest 已被弃用,因为它对最终用户的体验产生不利影响。
  • 我已经从问题中删除了 jQuery 标签,因为这是一个 Angular 应用程序,我还没有编写任何特定的 jQuery 代码。

标签: angularjs


【解决方案1】:

这是由于尝试从浏览器执行同步 AJAX 调用造成的。

如果Ajax调用是通过jQuery完成的,那么是在使用时引起的:

async: false

作为任何 jQuery ajax 调用的参数。

如果是用原生XMLHttpRequest做的,那么当第三个参数为:

xmlhttp.open(...)

设置为false


因此,问题的根源是从您的网页 Javascript 进行的 ajax 调用。您必须检查进行 Ajax 调用的所有位置,并找到设置错误参数的位置,修复参数并(可能)重新处理响应处理以处理异步响应。


这里有一些关于在 Angular 中进行同步 ajax 调用的一种方式的文章,因此它可能会让您知道要寻找什么:

How to $http Synchronous call with AngularJS

How to create synchronous using $http in angular.js

由于默认情况下 Angular 只做异步,看起来你必须不遗余力地创建自己的服务。为此,您将使用本机 XMLHttpRequest 对象,这样您就可以很好地编写 XMLHttpRequest 的代码并查看引用的位置,然后在该附近找到 .open() 调用。

【讨论】:

  • 添加了对几篇讨论如何在 AngularJS 中进行同步 Ajax 的文章的引用,这应该让您知道要寻找什么。
  • 但我不知道如何通过导航到甚至没有控制器的状态来触发此错误。
  • @tommyd456 - 如果不能浏览您的代码,我们无法进一步帮助您 - 我已经解释了尽可能多的理论 - 其余的只是您代码中的侦探工作。您的代码中的某处显然有一个同步的 Ajax 调用。有些人尝试使用同步 Ajax 的一个地方是 onunload 处理程序(因为异步 Ajax 在那里不起作用),所以这可能是一个值得一看的地方。
  • 我发现了一个愚蠢的错误。我的模板路径错误导致了这个相当误导的错误!我已经投票关闭它
  • 我的问题还在于模板的路径包含小写字母而不是大写字母。这个错误绝对是误导性的。
【解决方案2】:

我在我的生产服务器中有相同的Synchronous XMLHttpRequest on the main thread is deprecated,而在我的本地环境中没有这样的错误。

在我的情况下,这是由于模板名称与 js 请求的大小写不匹配:

  • AngularJS(在我的情况下是一个指令)请求小写mytemplate.tmpl.html
  • 模板文件以camelCase命名:myTemplate.tmpl.html

令问题感到困惑的是指令/模板在 Mac 上运行良好(由于 OSX case-insensitivity) - 但在推送到 Linux case-sensitive AWS 生产服务器时失败。

将模板文件名更改为小写修复了该问题。

如上述其中一个 cmets 所述,AJAX 错误具有误导性,因为它暗示调用本身有问题,而不仅仅是文件“丢失”。

【讨论】:

    猜你喜欢
    • 2015-09-16
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    相关资源
    最近更新 更多