弃用同步 XMLHttpRequest

问题描述 投票:0回答:3

我看到此错误:“[弃用]主线程上的同步 XMLHttpRequest 已弃用,因为它会对最终用户的体验产生不利影响。如需更多帮助,请检查 https://xhr.spec.whatwg.org/。” ,在此代码上:

var request;
if(window.XMLHttpRequest){
    request = new XMLHttpRequest();
}else{
    request = new ActiveXObject("Microsoft.XMLHTTP");
}
request.open('GET', 'http://www.mywebsite.com', false);
request.send();

我应该用什么来替换这些说明,因为它们已被弃用?

javascript html xmlhttprequest
3个回答
8
投票

你只需要改变

request.open('GET', 'http://www.mywebsite.com', false);

request.open('GET', 'http://www.mywebsite.com', true);

这将使请求异步操作,这意味着发送后的代码将立即执行,而不是等待请求完成。然后,您可以使用事件侦听器告诉请求完成后要运行哪些代码。

request.onreadystatechange = function () {
    if(request.readyState === XMLHttpRequest.DONE) {
        console.log("Request completed!");
    }
}

1
投票
request.open('GET', 'http://www.mywebsite.com', false)

这意味着您正在创建对 Web 服务的同步调用。所以理论上不要期待任何回电。

因此,要继续上述方法,请确保主体也为空。

request.send(null);

if (request.status === 200) {
  console.log(request.responseText);
}

null参数表示GET请求不需要body内容。 因此线程不会被阻塞。


0
投票

我收到此警告是因为我已声明

/js/main.js" type="text/javascript">

两次成功:函数(数据),其中数据与脚本声明一起获取,而且我在标题上定义了脚本,该脚本在每个页面上都可见。 当我从获取的数据中删除 /js/main.js" type="text/javascript"> 时。它解决了我的问题。

© www.soinside.com 2019 - 2024. All rights reserved.