2011-07-28 47 views
1

这是我之前询问的一个问题的后续。使用Ajax更新代码隐藏进程的运行进度

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> 

目前检查()开始在网页加载后立即运行。我希望只有在点击事件发生后才能调用它。如果我在click事件中定义了Check(),它不会识别setInterval,并且只会检查是否再次单击该按钮。这不是一个大问题,因为我认为脚本可以正常运行。它将只显示“不搜索”字符串。不幸的是,当文件被更新(并且我检查它是),页面不会显示内容,因为它会得到响应。它只是保持不变,然后一旦代码隐藏完成,它将重置为默认设置。谁能告诉我为什么页面没有更新?

编辑:忘记提及点击事件有一个onclick分配给C#代码隐藏,做长功能。我不知道是否可以运行JavaScript Ajax函数以及C#代码隐藏。 Ajax调用的async = true,但脚本部分不是平行于代码隐藏的权利?

再次编辑:我改变了脚本以向上计数。我希望它继续计数,而隐藏代码却做到了这一点,但一旦你点击按钮,它就会停止。代码隐藏完成后,重新启动计数。为什么计数不继续?我预计一旦代码隐藏完成后它会重新启动,但我认为它会继续计数。

回答

0

setInterval("Check()", 3000);应在按钮单击事件上调用。请勿直接在按钮单击事件上调用Click(),只需调用setInterval("Check()", 3000);,它将为您调用Click()

+0

你能解释一点吗?如何在不调用click事件的情况下单击按钮时调用setInterval()? $(文件)。就绪(函数(){ $( “#uploadbutton”)点击(函数(){ 的setInterval( “检查()”,1000); }); }); 这是我尝试过的一种方式,但它调用按钮单击事件。这样没有任何反应。 – spots

+0

如果我将Check()更改为向上计数,它就会起作用。由于代码隐藏运行页面计数。任何想法为什么当Ajax函数被调用时不起作用? – spots

+0

评论中的JavaScript看起来很好,它在点击按钮时运行匿名函数,这会启动Click()函数的时间间隔。有没有原因你不使用jQuery的一部分的ajax库?无论使用哪种浏览器,它都会处理ajax调用。此外,不要设置计时器(因为ajax响应可能需要一段时间才会回来),请将代码设置为在再次进行ajax调用之前等待ajax调用返回(它们可以开始与方式重叠你拥有了它)。 –