7

Tôi nhận được vấn đề JS khăng khăng sau đây chỉ dành cho IE 8-9, trong các trình duyệt khác mã của tôi hoạt động rất tốt.IE 8-9 Vấn đề JavaScript với vòng lặp dài

Trường hợp: Tôi có đoạn code sau trong JS, mà nên bắt đầu một số quá trình máy chủ và cập nhật thanh tiến trình với trạng thái trên phía máy chủ, những gì jquery UI cung cấp:

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

Trong phương pháp StartLongProcess trong hiện tại điều khiển tôi bắt đầu quá trình máy chủ lâu theo cách này: ..

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

Phương pháp mà đọc trạng thái hiện nay là tiếp theo:

/// <summary> 
     /// Gets the current progress. 
     /// </summary> 
     /// <param name="id">The id.</param> 
     public JsonResult GetCurrentProgress(int clientProcessId) 
     { 
      ControllerContext.HttpContext.Response.AddHeader("cache-control", "no-cache"); 
      var currentProgress = MesssageService.Email.GetCurrentLog(clientProcessId);    
      return Json(currentProgress ?? new LogMessage(0), JsonRequestBehavior.AllowGet); 
     } 

Tôi đã thử nghiệm mã này trong Chrome và FF, trong thanh tiến trình của trình duyệt và quá trình hoàn tất chính xác luôn. Nhưng trong IE 8-9 có vẻ như chức năng getStatus không thể được gọi theo cách này. Có đúng không? Cách tốt nhất để thực hiện nhiệm vụ của tôi cho tất cả các trình duyệt là gì? Cảm ơn.

+0

Mã JavaScript bao giờ nhận được giá trị ID quá trình? Có vẻ như nó luôn bằng không từ mã đó ở trên. – Pointy

+0

bạn đang gọi url mỗi 1/350 giây. Dit bạn kiểm tra mạng để xem nếu nó hoạt động? –

+0

@Pointy đó là Mã mẫu tôi đoán, được viết/sửa đổi phía máy chủ. Vì vậy, nó khác nhau cho mỗi người dùng/phiên. –

Trả lời

0

@cleric luôn có thể thử

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

hơn

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

. - Anthony Grist Jan 18 lúc 22:50

1

IE8 không cung cấp 'console.log()' làm hàm môi trường.

+0

Bàn điều khiển không phải là vấn đề khi đọc nhận xét được đề cập. Cảm ơn. –

Các vấn đề liên quan