2011-07-28 13 views
1

これは私が以前に質問した質問のフォローアップです。Ajaxを使用して、コードビハインドで実行中のプロセスの進行状況を更新します。

Update a Web Page as a Process Runs

私は、Webページは、プロセスがアヤックスを使用して実行されているどの段階表示したいです。コードの各ステップの後に、何が起きたかを示すテキストがファイルに上書きされます。 Webページがそのファイルの要求を定期的に送信し、setIntervalまたはsetTimeoutのいずれかを使用してその内容を表示するようにします。ボタンを押すと、Webページは要求サイクルを開始し、サーバーは時間のかかる操作を開始します。定期的な要求のために、私が今持っている何

...

スクリプト:

<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は認識されず、ボタンを再度クリックした場合にのみチェックされます。これは大きな問題ではありませんが、私はスクリプトを実行することが大丈夫だろうと思っています。それは単に "検索しない"文字列を表示します。残念なことに、ファイルが更新されると(それがチェックされた)、レスポンスを取得するとコンテンツが表示されません。それは同じままです。コードビハインドが終了すると、デフォルト設定にリセットされます。誰かがなぜページが更新されていないのか教えてもらえますか?

編集:clickイベントには、long関数を実行するC#コードビヘイビアに割り当てられたonclickがあります。 JavaScriptのAjax関数を実行してC#コードビヘイビアを実行させることができるかどうかはわかりません。 Ajaxの呼び出しにはasync = trueがありますが、スクリプト部分はコードビハインドと並行して実行されていませんか?

もう一度編集:スクリプトを上向きに変更しました。コードビハインドがそれをしていた間、私はそれを数え続けることを期待しましたが、一度ボタンを押すと停止します。コードビハインドが終了すると、カウントが再開されます。なぜカウントは続かないのですか?私は、コードビハインドが完了したらそれを再開することを期待していますが、それは数え続けると思っていました。

答えて

0

setInterval("Check()", 3000);は、ボタンクリックイベントで呼び出される必要があります。ボタンクリックイベントでClick()を直接起動しないでください。setInterval("Check()", 3000);を呼び出すと、Click()が呼び出されます。

+0

もう少し説明できますか? clickイベントを呼び出さずにボタンをクリックしたときにsetInterval()を呼び出すにはどうすればよいですか? $(ドキュメント).ready(関数(){ $( "#のuploadbutton")をクリックします(関数(){ のsetInterval( "チェック()"、1000);。 }); }); これは私が試した1つの方法ですが、ボタンのクリックイベントを呼び出します。このようなことは起こりません。 – spots

+0

Check()を上向きにカウントするように変更した場合、それは機能します。コードビヘイビアが実行されると、ページ数がカウントされます。 Ajax関数が呼び出されたときに動作しない理由は何ですか? – spots

+0

あなたのコメントのjavascriptはうまく見えます。ボタンがクリックされたときに匿名関数が実行され、Click()関数の間隔を開始する必要があります。 jQueryの一部であるajaxライブラリを使用していない理由はありますか?どのブラウザを使用していても、ajaxコールを処理します。また、タイマーを設定するのではなく(Ajaxレスポンスが戻ってくるのに時間がかかることがあるので)、別のajaxコールを行う前にajaxコールが戻るのを待つようにコードを設定しますあなたはそれを持っています)。 –

関連する問題