繁体   English   中英

使用XMLHttpRequest Timeout

[英]Using XMLHttpRequest Timeout

因此,当数据请求超时时,我尝试使用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(); 
}

我并没有完全遵循如何实现超时属性,或者它是否会按照我想要的方式执行。 我在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 

任何关于如何实现我的目标的建议,或者一些能够帮助我的文献都将受到高度赞赏。

谢谢!

问题是你在调用 pullRequest

xhr.ontimeout = pullRequest()
// ------------------------^^

因为它立即调用自身,然后再次调用自身,并再次调用自身等,最终当达到环境的最大递归级别时,它会耗尽堆栈。

你不想在那里调用它,你只想将函数引用分配给ontimeout这样如果超时发生,你的函数会被调用:

xhr.ontimeout = pullRequest
// No () ------------------^

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM