Используйте Ajax для обновления хода выполнения процесса в codebehind - PullRequest
1 голос
/ 29 июля 2011

Это продолжение вопроса, который я задавал ранее.

Обновление веб-страницы при запуске процесса

Я хочу, чтобы на веб-странице отображалось, на какой стадии выполняется процесс с использованием Ajax. После каждого шага в коде файл перезаписывается текстом с указанием того, что только что произошло. Я хочу, чтобы веб-страница периодически отправляла запрос на этот файл и отображала его содержимое, используя setInterval или setTimeout. Как только кнопка нажата, веб-страница начинает свой цикл запросов, и сервер начинает свою длительную операцию.

Что у меня сейчас ...

Скрипт для периодических запросов:

<script type="text/javascript">

    var d = setInterval("Check()", 3000);
    function Check() {
        var xmlhttp;
        if (window.XMLHttpRequest) {
            xmlhttp = new XMLHttpRequest();
        }
        else {// code for IE6, IE5
            alert("get chrome");
        }
        xmlhttp.onreadystatechange = function () {
            if (xmlhttp.readyState == 4) {
                document.getElementById("s").innerHTML = xmlhttp.responseText;
            }
        }
        xmlhttp.open("GET", "temp/test.txt", true);
        xmlhttp.send();
    }

    /*$(document).ready(function () {
    $("#uploadbutton").click(Check());
    });*/
</script>

В настоящее время Check () запускается сразу после загрузки страницы. Я бы хотел, чтобы он вызывался только после того, как произошло событие click. Если я определю Check () внутри события click, он не распознает setInterval и будет проверять, только если я нажму кнопку еще раз. Это не большая проблема, так как я думаю, что будет нормально запустить скрипт. Он просто отобразит строку «не ищет». К сожалению, когда файл обновляется (и я проверил, что это так), страница не отображает содержимое, так как получает ответ. Он просто остается прежним, затем, когда код заканчивается, он сбрасывается к настройке по умолчанию. Может кто-нибудь сказать мне, почему страница не обновляется?

edit: забыл упомянуть, что событию click назначен onclick для кода C #, выполняющего функцию long. Я не знаю, смогу ли я запустить Ajax-функцию javascript и запустить код на C #. Вызовы Ajax имеют async = true, но часть сценария не работает параллельно коду, верно?

еще раз отредактируйте: я изменил скрипт для подсчета в сторону увеличения. Я ожидал, что он продолжит отсчитывать, пока кодовый код делал свое дело, но как только вы нажмете кнопку, он остановится. Как только кодовый код заканчивается, он перезапускает счет. Почему подсчет не продолжается? Я ожидаю, что он будет перезапущен, как только кодовая часть будет завершена, но я подумал, что он продолжит считать.

1 Ответ

0 голосов
/ 29 июля 2011

setInterval("Check()", 3000); должен вызываться при событии нажатия кнопки. Не вызывайте Click() непосредственно для события нажатия кнопки, просто вызовите setInterval("Check()", 3000);, и он вызовет Click() для вас.

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