我的浏览器(或jQuery框架,更具体)打印以下警告到浏览器的控制台:接收异步函数警告有关同步的XMLHttpRequest
在主线程同步的XMLHttpRequest已被弃用,因为它的对最终用户的体验造成不利影响。如需更多帮助,请查询http://xhr.spec.whatwg.org/。
我明白了警告,但不是它为什么会出现。我的理解asyncFunct()的调用是异步,因此不应该打印警告消息。
我用这段JavaScript代码:
var i18nObject;
$(document).ready(function() {
// execute asyncFunct() asynchronously
setTimeout(asyncFunct, 3000);
});
function asyncFunct() {
alert(i18n("rejoin.title"));
}
function i18n(key) {
if (typeof i18nObject == 'undefined') {
// i18n not loaded yet, need to load it first
$.ajax({
url: 'UrlTo/i18n.json',
async: false,
dataType: 'json',
success: function (response) {
i18nObject = response;
}
});
}
if (i18nObject.hasOwnProperty(key)) {
// key found
return i18nObject[key];
} else {
// key not found
return key;
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
面临一些忧虑(从评论)async: false
:这是刻意选择,因为我需要的函数返回一个值。我明白如果他们锁定用户界面,使用同步调用是一个坏主意。但为什么这适用于我的问题呢?我希望对asyncFunct()的调用是异步的。
为什么我收到此警告,并且可以禁用它? (防止在控制台不必要的文本)
它清楚地告诉你不要使用'async:false',这首先是一种可怕的做法。在成功回调中处理您的回复。请参阅[如何返回异步调用的响应](http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-asynchronous-call ) – charlietfl
这个警告表明,如果你想使用'async:false',你应该在主线程之外执行它。看看使用[Web工作者](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers)。 – Amit
我现在通过在另一个AJAX调用的完成函数中移动i18n()调用来修复此问题。这对我的具体问题非常有用(因为我需要进行调用),但我仍然感兴趣为什么此消息显示在第一位。 – Nijin22