只有在我从该请求得到响应之后,如何在其中使用XMLHttpRequest继续循环JavaScript函数

时间:2018-04-12 18:19:48

标签: javascript xmlhttprequest setinterval infinite-loop

我的要求是在从现有的xhr请求获得响应后循环(保持重新调用)请求。我目前设置超时2秒。但我仍然不确定这是否有效。我不希望严格的超时,因为请求可能需要一段时间,这是可以的(因为它有一个数据库调用)。所以有任何建议,我得到一个回应后如何再次调用该函数?

   var request = (window.XMLHttpRequest) ? new XMLHttpRequest() : (window.ActiveXObject ? new window.ActiveXObject("Microsoft.XMLHTTP") : false);

   function htmlGen (log){
        var data_count = someNumber;
        var url = someURL;
        request.open("GET", url, true);
        request.timeout = 2000;
        request.onreadystatechange = updatePage; //some function to update my page
        request.send(null);
    }        
    function timerCntrl(command,log) {
        if (command == "start") {
            document.getElementById("start").disabled = true;
            document.getElementById("stop").disabled = false;
            timer = setInterval(function() { htmlGen(log);}, 2000);
        }else{
            document.getElementById("watchStart").disabled = false;
            document.getElementById("watchStop").disabled = true;
            clearTimeout(timer);
        }
    }

提前致谢:)

1 个答案:

答案 0 :(得分:1)

此代码应该有效。它发出请求然后等待它的响应。一旦响应到来,它就会发出另一个请求,然后等待响应...等等......

var request = (window.XMLHttpRequest) ? new XMLHttpRequest() : (window.ActiveXObject ? new window.ActiveXObject("Microsoft.XMLHTTP") : false);
var url;
function updatePage();

async function startRequests() {
    while(true) {
        request.open("GET", url, false);
        request.onreadystatechange = updatePage; //some function to update my page
        request.send(null);
    }
}

请注意,由于某些原因,这些内容不会记录在控制台上(这太有趣了,因此我必须处理SO中的“Too Many Requests”错误)。而且,这真的不是一件好事。这更像是DDoS,而不是实际的HTTP请求。小心使用它。