JavaScript的执行console.log导致错误:“在主线程同步的XMLHttpRequest已经过时......”
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript的执行console.log导致错误:“在主线程同步的XMLHttpRequest已经过时......”相关的知识,希望对你有一定的参考价值。
我一直在增加日志到控制台检查不同变量的状态,而无需使用Firefox的调试器。
然而,在我在console.log
文件中添加main.js
很多地方,我收到以下错误,而不是我的可爱的小手写的讯息给自己:
在主线程同步的XMLHttpRequest是因为其所带来的影响最终用户的体验弃用。如需更多帮助http://xhr.spec.whatwg.org/
我可以添加console.log
什么替代品或包装到我的代码使用不会导致这个错误?
我在“做错了”?
这发生在我身上时,我是懒惰和包含一个脚本标记,正在返回的内容的一部分。因此:
部分html内容:
<div>
SOME CONTENT HERE
</div>
<script src="/scripts/script.js"></script>
看来,至少在我的情况下,如果返回通过XHR HTML内容那样,会给你带来jQuery来拨打电话,以获得该脚本。这调用发生与异步标志为假,因为它假定您需要的脚本来继续加载。
在这样的一个你会通过寻找到某种形式的约束框架,只是返回一个JSON对象,或者根据您的后端和模板,你可以改变你的加载脚本得到更好的服务情况。
你也可以使用jQuery's getScript()
抢相关的脚本。这里是一个小提琴,这只是jQuery的例子的直副本,但我没有看到当脚本加载这样的警告抛出。
例
<script>
var url = "/scripts/script.js";
$.getScript(url);
</script>
我得到这个例外,当我像“example.com/files/text.txt”查询设置网址。香港专业教育学院改变了网址为“http://example.com/files/text.txt”和这个异常dissapeared。
而我得到这个例外,包括内部另一个can.js脚本,例如,
{{>anotherScript}}
在MVC应用程序,我是因为我开剑道窗口与已返回查看(方法),而不是PartialView()得到这个警告。该视图()试图再次retrive页面的所有脚本。
这是发生在我ZF2。我试图加载模态的内容,但我忘了之前禁用布局。
所以:
$viewModel = new ViewModel();
$viewModel->setTerminal(true);
return $viewModel;
像@Nycen我也有,因为链接到Cloudfare的这个错误。煤矿是为选择二插件。
修复它我只是删除
src="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/js/select2.min.js"
和错误走了。
这是在我的案件告破。
JS
$.ajaxPrefilter(function( options, original_Options, jqXHR ) {
options.async = true;
});
这个答案是插在这个环节
https://stackoverflow.com/questions/28322636/synchronous-xmlhttprequest-warning-and-script
在我的情况下,这是由flexie脚本是由CloudFlare的提供的“CDNJS选择”应用程序的一部分引起的。
据CloudFlare的“这个程序即将淘汰2015年3月”。我把它关掉,该消息瞬间消失。
您可以通过访问https://www.cloudflare.com/a/cloudflare-apps/yourdomain.com访问应用程序
注:这是我的回答对这个线程Synchronous XMLHttpRequest warning and <script>复印件(我访问了寻找一个解决方案时)
- 在Chrome中,
press F12
- Develomping工具 - >按
F1
。 - 请参阅设置>通用>外观:qazxsw poi-设置此复选框。
- 请参阅设置>通用>控制台:
"Don't show chrome Data Saver warning"
- 将此复选框了。
请享用
我解决了这个问题通过下面的步骤:
- 检查您的CDN的脚本,并添加本地。
- 将您的脚本包括到标题部分。
在我的具体情况,我渲染Rails的部分不"Log XMLHTTPRequest"
其重新呈现整个布局,包括所有在render layout: false
标签中的脚本。添加<head>
控制器动作解决了这一问题。
该警告消息可以是由于与设置为false异步标志主线程内一个XMLHttpRequest请求。
https://xhr.spec.whatwg.org/#synchronous-flag:
工人外同步XMLHttpRequest是在从网络平台被删除,因为它有不利的影响到最终用户的体验过程。 (这是一个长期的过程,需要许多年。)当javascript的全球环境是一个文档环境开发人员不得通过为异步false参数。我们强烈建议用户代理警告开发者工具等的使用,并且可以与在其发生时抛出一个异常InvalidAccessError试验。
未来的方向是只允许在工作线程的XMLHttpRequest。该消息意在表明此警告。
对我来说,问题是,在一个确定的要求,我希望Ajax响应是一个很好的HTML格式的字符串,比如一个表,但在这种情况下,服务器中遇到的问题与请求,重定向到一个错误页面,因此,被回返回错误页面的HTML代码(其中有一个render layout: false
标签的地方。我的控制台登录Ajax响应,这时候我意识到这不是我所期待的,然后继续做我的调试。
这个问题在2014年提出的,它是2019,所以我想这是很好的寻找更好的选择。
你可以简单地在Javascript这为您提供更多的灵活性,使用<script
API。
例如,看到这个代码
fetch
我也面临着同样的问题,但可以通过将异步解决它:真的。我知道这是默认为true,但是当我把它写明确它的工作原理
$.ajax({
async: true, // this will solve the problem
type: "POST",
url: "/Page/Method",
contentType: "application/json",
data: JSON.stringify({ ParameterName: paramValue }),
});
Visual Studio中二千零十七分之二千零十五的现场调试器注入包含旧版调用代码。
有时候有必要阿贾克斯加载脚本,但延迟文件准备的脚本被加载后,直到。
jQuery的支持这与holdReady()
功能。
实例:
$.holdReady(true); //set hold
function releaseHold() { $.holdReady(false); } //callback to release hold
$.getScript('script.js', releaseHold); //load script then release hold
实际的脚本加载是异步的(没有错误),但效果是同步的,如果你的JavaScript其余文件准备好后运行。
这种先进的功能通常被认为要加载额外的JavaScript动态脚本装载机如jQuery插件允许发生ready事件之前使用,即使DOM可能是准备好了。
文档: https://api.jquery.com/jquery.holdready
UPDATE January 7, 2019
jQuery.holdReady()已过时
原因:
jQuery.holdReady()
方法已经由于对页面的整体性能的不利影响弃用。这种方法可以防止网页上的所有代码初始化为过长时间。解决方案:重写网页,使其不要求所有的jQuery准备处理延迟。这可能来完成,例如,通过后期装入只需要延迟时,可以安全地运行代码。由于这种方法的复杂性,jQuery的迁移不会尝试,以填补功能。如果jQuery的的基本版本使用jQuery的迁移不再包含
jQuery.holdReady()
出现此警告后的代码很快就会失败。
要避免此警告,不要使用:
async: false
在您的任何$阿贾克斯()调用。这是一个弃用的XMLHttpRequest的唯一特征。
默认值是
async: true
jQuery has deprecated synchronous XMLHTTPRequest
@Webgr部分答案其实是帮我调试此警告@控制台日志,可惜答案带来这么多downvotes另一部分:(
总之,这里是我发现了什么是此警告在我的情况的原因:
- 使用Chrome浏览器>按F12带来DevTools
- 打开抽屉菜单(在Chrome右上角3个垂直点)
- 在控制台>查看日志XMLHttpRequest的选项
- 重新载入网页这是给你的错误,并观察在控制台日志中的每个Ajax请求会发生什么。
在我的情况下,另一个插件是加载每次Ajax调用后2个的.js库,这是绝对不需要也没有必要。禁用流氓插件删除从日志的警告。从这一点来说,你可以尝试解决自己的问题(例如限制脚本某些网页或事件的加载 - 这是太特殊了这里的答案),或联系第三方插件开发者来解决它。
希望这可以帮助别人。
我一直在寻找的答案都令人印象深刻。我觉得他应该提供被给了他一个问题的代码。考虑下面的例子,如果你有一个脚本链接到jQuery的在page.php文件,然后你会得到通知。
$().ready(function () {
$.ajax({url: "page.php",
type: 'GET',
success: function (result) {
$("#page").html(result);
}});
});
我得到了以下的情况下,这样的警告:
1)文件1包含<script type="text/javascript" src="/javascript/jquery-1.10.2.js"></script>
。页面有输入字段。我进入输入领域的一些值,然后单击按钮。 Jquery的发送输入到外部PHP文件。
2)外部的PHP文件还包含jQuery和在外部PHP文件我还包括<script type="text/javascript" src="/javascript/jquery-1.10.2.js"></script>
。因为如果我得到了警告。
从外部php文件和作品,未经警告删除<script type="text/javascript" src="/javascript/jquery-1.10.2.js"></script>
。
正如我上加载第一文件(文件1)了解,我加载jquery-1.10.2.js
和作为页不重新加载(它使用jquery $.post
将数据发送到外部PHP文件),则jquery-1.10.2.js
继
以上是关于JavaScript的执行console.log导致错误:“在主线程同步的XMLHttpRequest已经过时......”的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript的执行console.log导致错误:“在主线程同步的XMLHttpRequest已经过时......”