【问题标题】:Use Ajax to update progress of process running in codebehind使用 Ajax 更新在代码隐藏中运行的进程的进度
【发布时间】:2023-04-07 01:51:01
【问题描述】:

这是对我之前提出的问题的跟进。

Update a Web Page as a Process Runs

我希望网页显示进程正在使用 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() ,它不会识别 setInterval 并且只会检查我是否再次单击该按钮。这不是一个大问题,因为我认为让脚本运行就可以了。它只会显示一个“不搜索”字符串。不幸的是,随着文件的更新(我检查过它是),页面在获得响应时不会显示内容。它只是保持不变,然后一旦代码隐藏完成,它就会重置为默认设置。谁能告诉我为什么页面没有更新?

编辑:忘了提到 click 事件有一个 onclick 分配给执行 long 功能的 C# 代码隐藏。我不知道我是否可以运行 javascript Ajax 函数和 C# 代码隐藏。 Ajax 调用具有 async = true,但脚本部分未与代码隐藏并行运行,对吗?

再次编辑:我将脚本更改为向上计数。我希望它在代码隐藏完成它的事情时继续计数,但是一旦你按下按钮它就会停止。一旦代码隐藏完成,它就会重新开始计数。为什么计数不继续?我希望它在代码隐藏完成后重新启动,但我认为它会继续计数。

【问题讨论】:

    标签: c# javascript ajax progress-bar


    【解决方案1】:

    setInterval("Check()", 3000); 应该在按钮单击事件上调用。不要在按钮点击事件上直接调用Click(),只需调用setInterval("Check()", 3000);,它就会为你调用Click()。

    【讨论】:

    • 你能再解释一下吗?当单击按钮而不调用单击事件时,如何调用 setInterval() 发生? $(document).ready(function () { $("#uploadbutton").click(function () { setInterval("Check()", 1000); }); });这是我尝试过的一种方法,但它会调用按钮单击事件。这种方式不会发生任何事情。
    • 如果我将 Check() 更改为向上计数,它就可以工作。随着代码隐藏运行页面计数。任何想法为什么在调用 Ajax 函数时它不起作用?
    • 您评论中的 javascript 看起来不错,它在单击按钮时运行匿名函数,这应该启动 Click() 函数的间隔。您是否有理由不使用作为 jQuery 一部分的 ajax 库?无论他们使用什么浏览器,它都会处理 ajax 调用。此外,不要设置计时器(因为 ajax 响应可能需要一段时间才能返回),而是设置您的代码,以便在进行另一个 ajax 调用之前等待 ajax 调用返回(它们可能开始与方式重叠你有它)。
    猜你喜欢
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 2020-12-30
    • 1970-01-01
    • 2012-06-07
    • 2016-12-17
    • 2011-11-02
    相关资源
    最近更新 更多