7

IE 8-9のために、次のような厳しいJS問題がありました。他のブラウザでは、私のコードがうまく機能しています。IE 8-9長いループでのJavaScriptの問題

ケース: は、私はいくつかのサーバー・プロセスを開始し、サーバー側の状態でプログレスバーを更新する必要がJSに次のコードを、持っている、jQueryのUIを提供するもの:現在でStartLongProcess方法で

$("#btnSendUser").click(function (event) {     
       $.ajax({ 
        type: "POST", 
        url: "/StartLongProcess", 
        dataType: "json", 
        traditional: true, 
        data: { userIds: users }, 
        success: function (result) { 
         console.log("Process start"); 
        } 
       }); 
       var processId = 0; 
       getStatus(processId); 
      }); 

     function getStatus(processId) { 
      var url = '/GetStatus'; 
      $.get(url, { clientProcessId: processId }, function (data) { 
       if (!data.IsDone) { 
        $("#progress").progressbar({ value: data.Progress });           
        window.setTimeout("getStatus(" + processId + ")", 350); 
       } 
       else { 
        $("#progress").progressbar({ value: 100 });  
        console.log("Done");                
       }; 
      });         
     } 

をコントローラは、私は、このように長いサーバ・プロセスを開始: ...現在の状態を読み

[ValidateInput(false)] 
     public void StartLongProcess(Guid[] userIds) 
     {  
      ... 
      var processTask = new LongProcess(MesssageService.Email.SendMails); 
      processTask.BeginInvoke(service.LongProcess(userIds), new AsyncCallback(EndSendingProcess), processTask); 
     } 

方法は次です:

​​

私はこのコードをChromeとFFでテストしました。これらのブラウザでは、プログレスバーとプロセスは常に正しく終了しました。しかし、IE 8-9では、getStatus関数をこのように呼び出すことはできません。本当ですか?すべてのブラウザで自分のタスクを実装する最良の方法は何ですか?おかげさまで

+0

JavaScriptコードはどのようにしてプロセスID値を取得しますか?上のコードからは常にゼロのようです。 – Pointy

+0

あなたは1/350秒ごとにURLを呼び出しています。あなたはそれが動作するかどうかを確認するためにネットワークをチェックしますか? –

+0

@Pointyは、私が推測すると、書かれた/修正されたサーバー側と思われるサンプルコードです。したがって、ユーザー/セッションごとに異なります。 –

答えて

0

@clericは常に

window.setTimeout(function() {getStatus(processId)},350); 

ではなく

window.setTimeout("getStatus(" + processId + ")", 350); 

を試すことができます。 - Anthony Grist Jan 18 at 22:50

1

IE8は、環境変数として 'console.log()'を提供していません。

+0

コンソールは問題ではありませんでした。ありがとう。 –