用JavaScript每10秒发送一次xmlHttpRequest

Send xmlHttpRequest every 10 second in JavaScript

本文关键字:一次 xmlHttpRequest JavaScript 10秒      更新时间:2023-09-26

我运行了一个JavaScript函数,该函数将xmlHttpRequest发送到.ashx(让我们将其命名为首次在页面加载时运行的send_req())。对于onreadystatechange,我有一个接收XML数据并将其显示在页面上的函数(我们将其命名为getanswer())。

我想每20秒自动更新一次页面上的XML数据。为此,我在writexml()的末尾使用setTimeout(send_req(),20000),但它不会更新页面上的数据。我在代码的****行添加了一个alert()。它每隔一秒就会出现在页面上!

如果我在没有setTimeout的情况下使用它,我的代码也能很好地工作。

这是我的代码

var Population = "";
var Available_money = "";
var resource_timer;
var httpReq_resource;
function send_req() {
    if (window.ActiveXObject) {
        httpReq_resource = new ActiveXObject("Microsoft.XMLHTTP");
    }
    else if (window.XMLHttpRequest) {
        httpReq_resource = new XMLHttpRequest();
    }
    var sendStr = "user_id=1";
    if (httpReq_resource)
    {
        httpReq_resource.onreadystatechange = getanswer;
        httpReq_resource.open("POST", "Answer_Resource_change.ashx");
        httpReq_resource.send(sendStr);
    }
}
function getanswer() {
    var results = httpReq_resource.responseXML;
    if (httpReq_resource.readyState == 4) {
        if (httpReq_resource.status == 200) {
            try {
                var value;
                var values = results.getElementsByTagName("values");
                for (var i = 0; i < values.length; i++) {
                    value = values[i];
                    Population = value.getElementsByTagName("Population")[0].firstChild.nodeValue;
                    Available_money = value.getElementsByTagName("Available_money")[0].firstChild.nodeValue;
                    ... and some more like two line up
                }
                make_changes();
                **********************************
                resource_timer = setTimeout(send_req(), 20000);
            }
            catch (e) {
            }
        }
    }
}
function make_changes() {
    $("li span#l1").text(Available_money + '/' + Population);
    ...and some more like up line
}

这:

resource_timer = setTimeout(send_req(), 20000);

应为:

resource_timer = setTimeout(send_req, 20000);

第一个在20秒后执行send_req()结果,第二个执行send_req本身。