7

Sadece IE 8-9 için aşağıdaki ısrarcı JS sorununu aldım, diğer tarayıcılarda kodum çok iyi çalışıyor.IE 8-9 Uzun döngüde JavaScript sorunu

Olgu: Bazı sunucu işlemini başlatmak ve jQuery UI sağladıklarının sunucu tarafında statü ile ilerleme çubuğu güncelleştirmek gerekir JS aşağıdaki kodu vardır: akımda

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

yılında StartLongProcess yöntemi kontrolör bu şekilde uzun sunucu işlemine başlamadan: .. mevcut durumunu okumak

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

Yöntem yanındadır:

/// <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); 
     } 

Bu kodu Chrome ve FF'de, bu tarayıcılar ilerleme çubuğunda test ettim ve işlem her zaman doğru şekilde tamamlandı. Ama IE 8-9'da getStatus işlevi bu şekilde çağrılmaz gibi görünüyor. Bu doğru mu? Tüm tarayıcılar için görevimi uygulamanın en iyi yolu nedir? Teşekkürler.

+0

JavaScript kodu süreç kimliği değerini nasıl alır? Yukarıdaki koddan her zaman sıfır gibi görünüyor. – Pointy

+0

, her 1/350 saniyede bir URL çağırıyorsunuz. İşe yarayıp yaramadığını görmek için ağı kontrol ettin mi? –

+0

@Pointy Örnek kod, yazılan/değiştirilen sunucu tarafı sanırım. Bu yüzden kullanıcı/oturum başına farklılık gösterir. –

cevap

0

@cleric hep

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

yerine

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

deneyebilir miyim. - Anthony Grist Jan 18 at 22:50

1

IE8, 'console.log()' işlevini çevre işlevi olarak sağlamaz.

+0

Konsolu, söz konusu yorumları okuyan bir sorun değildi. Teşekkürler. –