出于某种原因,我在Angularjs应用中遇到以下错误:
主线程上的同步XMLHttpRequest因其对最终用户体验的不利影响而被弃用。
由于我还没有弄清楚导致它的原因,我不知道要分享哪些代码? 当我导航到状态(ui-router)但没有与此状态相关联的控制器时,会出现问题。
之前有人见过这个吗?
答案 0 :(得分:3)
这是因为尝试从浏览器进行同步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()
调用。< / p>
答案 1 :(得分:2)
我的生产服务器中有Synchronous XMLHttpRequest on the main thread is deprecated
,而本地环境中没有此类错误。
在我的情况下,这是由于模板名称与js请求不匹配:
mytemplate.tmpl.html
myTemplate.tmpl.html
令人困惑的问题是指令/模板在Mac上运行良好(由于OSX case-insensitivity) - 但在推送到Linux case-sensitive AWS生产服务器时失败。
将模板文件名更改为小写可修复问题。
正如上面其中一条评论中所提到的,AJAX错误具有误导性,因为它意味着调用本身有问题,而不仅仅是文件是&#34;缺少&#34;。