gpt4 book ai didi

javascript - 为什么这段js会抛出DOM异常呢?

转载 作者:行者123 更新时间:2023-12-01 22:32:02 24 4
gpt4 key购买 nike

我不明白为什么会这样fiddle抛出

Uncaught Error: InvalidStateError: DOM Exception 11

function url(){
return '/echo/js/?js=' + 5 + Math.floor(Math.random()*900);
}

function poll(done){
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if(xhr.status === 200 && xhr.readyState === 4){
var foo = xhr.responseText;
done(parseInt(foo));
}
};
xhr.open('get',url(),false);
xhr.send(null);
}

var button = document.querySelector('#poller');
var price = document.querySelector('#price');

button.addEventListener('click', function(){
poll(function(data){
price.innerText = data;
});
},false);

最佳答案

问题是readyState为0/1时状态不可用

您需要颠倒 if 中的顺序。

if(xhr.readyState === 4 && xhr.status === 200){

规范说它应该返回零 "If the state is UNSENT or OPENED, return 0 and terminate these steps." ,但由于某种原因,某些浏览器会这样做“如果状态未打开或设置了 send() 标志,则抛出“InvalidStateError”异常。”这是什么setRequestHeader做。另外,您的代码很奇怪,您将其与同步请求一起使用。

所以这里的问题是浏览器没有像规范所说的那样返回零。更改 if 语句中的顺序可防止浏览器到达该点,因为第一次检查失败。

还有bug on WebKit

关于javascript - 为什么这段js会抛出DOM异常呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15622985/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com