7

我得到了以下堅持JS問題只是爲了IE 8-9,在其他瀏覽器我的代碼工作得很好。IE 8-9長循環JavaScript問題

案例: 我在JS下面的代碼,應該啓動一些服務器進程,並更新與服務器端的狀態,什麼jQuery用戶界面提供進度條:

$("#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");                
       }; 
      });         
     } 

StartLongProcess在當前的方法控制器我開始長服務器進程以這種方式: ..讀取當前狀態

[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 2012-01-18 15:46:47

+0

你每1/350秒呼叫一個網址。你檢查網絡,看看是否有效? – 2012-01-18 15:48:29

+0

@Pointy是我想的樣本代碼,寫入/修改服務器端。所以它根據用戶/會話而不同。 – 2012-01-18 15:49:44

回答

0

@cleric可以嘗試

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

而不是

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

。 - Anthony Grist 1月18日22:50

1

IE8不提供'console.log()'作爲環境函數。

+0

控制檯不是問題閱讀有問題的評論。謝謝。 – 2012-01-24 14:27:42