Javascript ajax函数的主线程警告
我为ajax提供了一组函数来处理POST和GET上的发送和接收数据。但我在Chrome上得到了这样的警告: 主线程上的同步XMLHttpRequest已弃用 我不清楚如何修复这个警告,因为我不想忽视它而导致将来的问题 这是我的ajax函数代码:Javascript ajax函数的主线程警告,javascript,ajax,Javascript,Ajax,我为ajax提供了一组函数来处理POST和GET上的发送和接收数据。但我在Chrome上得到了这样的警告: 主线程上的同步XMLHttpRequest已弃用 我不清楚如何修复这个警告,因为我不想忽视它而导致将来的问题 这是我的ajax函数代码: var ajax = new function(){ var self = this; self.x = function() { if (window.XMLHttpRequest){// code for IE7+
var ajax = new function(){
var self = this;
self.x = function() {
if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
return new XMLHttpRequest();
}else{// code for IE6, IE5
return new ActiveXObject("Microsoft.XMLHTTP");
}
};
self.send = function(url, callback, method, data, sync) {
var x = self.x();
x.open(method, url, sync);
x.onreadystatechange = function() {
if (x.readyState == 4) {
callback(x.responseText)
}
};
if (method == 'POST') {
x.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
}
x.send(data)
};
self.get = function(url, data, callback, sync) {
var query = [];
for (var key in data) {
query.push(encodeURIComponent(key) + '=' + encodeURIComponent(data[key]));
}
self.send(url + (query.length ? '?' + query.join('&') : ''), callback, 'GET', null, sync)
};
self.post = function(url, data, callback, sync) {
var query = [];
for (var key in data) {
query.push(encodeURIComponent(key) + '=' + encodeURIComponent(data[key]));
}
self.send(url, callback, 'POST', query.join('&'), sync)
};
};
此警告的具体原因是什么?我将如何纠正它以符合公认的标准?调用
send
方法时,请确保最后一个参数(sync
)设置为false。如果设置为true,它将异步执行AJAX调用,因此不会向您发出警告
同步调用确实被弃用,因为它在等待响应时会完全阻塞主线程。在大多数情况下,这将完全阻塞浏览器的UI,直到调用结束。问题是,我正在使用AJAX加载HTML页面。因此,我确实需要它在加载页面时在技术上阻止,因为网站在加载页面之前不应该做任何事情。但是如果它被弃用了,处理这类事情的新标准方法是什么呢?只需显示一个白色页面,或者更好的是,显示一个小微调器,让用户知道HTML正在加载。这样,浏览器不会被阻止,用户的结果也不会改变。当您在AJAX调用的结果中收到HTML时,您将显示它并删除微调器(如果有)。