【发布时间】:2017-09-12 18:08:37
【问题描述】:
所以我尝试使用 XMLHttpRequest 的 timeout 属性在数据请求超时时“恢复”我的程序。基本上,如果它无法检索数据,我希望它再试一次。目前我的代码看起来像这样(完整的 URL 被删除以整齐地适应它):
function pullRequest(){
var xhr = new XMLHttpRequest()
xhr.onreadystatechange = function() {
if (this.readyState === 4) {
jsonDecode = this.responseText;
json = JSON.parse(jsonDecode);
ask = (json.result.Ask);
bid = (json.result.Bid);
}
}
xhr.open("GET","<URL>",true);
xhr.send();
}
我并没有完全遵循如何实现 timeout 属性,或者它是否会做我想做的事。我确实在xhr.open之后添加了以下两行,但它抛出了错误:
xhr.timeout = 5000;
xhr.ontimeout = pullRequest()
如果超时,基本上在我的脑海中,再次运行pullRequest 函数。我敢肯定这可能不是一个好主意,但我没有足够的经验知道为什么。值得一提的错误如下:
...\node_modules\xmlhttprequest\lib\XMLHttpRequest.js:165
settings = {
^
RangeError: Maximum call stack size exceeded at exports.XMLHttpRequest.open
任何关于如何实现我的目标的建议,或者对我有帮助的一些文献,我们将不胜感激。
谢谢!
【问题讨论】:
-
我还建议使用
if (this.readyState == 4 && this.status == 200) {而不仅仅是this.readyState === 4,因为它只检查它是否完成,而不是它是否成功。 -
几个side-cmets: 1. 要么使用
;,要么不使用它们并依赖自动分号插入;不要混搭。 :-) 2.ask = (json.result.Ask);中的()毫无用处。 -
是的,我编写的代码是许多已启动、已停止和已重新启动的版本的混合搭配。据我所知,我做的事情更正确,但你看到的旧代码仍然存在“不正确”的格式。我得把它全部清理干净! FWIW我通常使用“;”。同样在我的辩护中,我的兄弟写了 json.result 行,他对编码的了解甚至比我还少:)
标签: javascript node.js xmlhttprequest