2011-07-28 44 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調用返回(它們可以開始與方式重疊你擁有了它)。 –