Отправить xmlHttpRequest каждые 10 секунд в JavaScript - PullRequest
1 голос
/ 07 июня 2011

Я запускаю функцию JavaScript, которая отправляет xmlHttpRequest на .ashx (назовем его send_req(), который запускается при загрузке страницы в первый раз).Для onreadystatechange у меня есть функция, которая получает данные XML и отображает их на странице (назовем это getanswer()).

Я хочу автоматически обновлять данные XML на странице каждые 20 секунд.Для этого я использую setTimeout(send_req(),20000) в конце writexml(), но он не обновляет данные на странице.Я добавляю 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
}

1 Ответ

6 голосов
/ 07 июня 2011

Это:

resource_timer = setTimeout(send_req(), 20000);

Должно быть:

resource_timer = setTimeout(send_req, 20000);

Первый выполняет результат из send_req() через 20 секунд, второй выполняет send_req сам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...