废弃 同步XMLHttpRequest

3
我看到这个错误:"[Deprecation] Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check 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();

因为它们已经过时,我应该用什么替换这些指令呢?


3
false 翻译成中文是 ,而 true 则是 - Jaromanda X
https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Synchronous_and_Asynchronous_Requests - Brian
2个回答

7

您只需要更改

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

to

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

这将使请求异步运行,意味着发送后的代码会立即执行,而不是等待请求完成。然后,您可以使用事件监听器告诉请求在完成时运行哪些代码。
request.onreadystatechange = function () {
    if(request.readyState === XMLHttpRequest.DONE) {
        console.log("Request completed!");
    }
}

2
当然,一旦你完成了那个步骤,还有很多东西需要改变。 - Jaromanda X

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

这意味着您正在创建一个同步调用Web服务。因此理论上不期望任何回调。
因此,要继续以上方法,请确保正文也为null。
request.send(null);

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接