7

Mam następujący natarczywy problem JS tylko dla IE 8-9, w innych przeglądarkach mój kod działa bardzo dobrze.IE 8-9 Problem z JavaScript z długą pętlą

koperty: Mam następujący kod w JS, który powinien rozpocząć jakiś proces serwera i zaktualizować pasek postępu ze statusem po stronie serwera, co jQuery UI świadczenia:

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

W StartLongProcess metodę w prądzie kontroler I rozpoczynając proces serwera długo w ten sposób: ..

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

metoda, która odczytać aktualny status jest następny:

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

Testowałem ten kod w Chrome i FF, w pasku postępu przeglądarki i proces zakończył się poprawnie zawsze. Ale w IE 8-9 wygląda na to, że funkcja getStatus nie może być wywołana w ten sposób. Czy to prawda? Jaki jest najlepszy sposób realizacji mojego zadania dla wszystkich przeglądarek? Dzięki.

+0

W jaki sposób kod JavaScript otrzymuje wartość identyfikatora procesu? Wygląda na to, że zawsze jest zero od powyższego kodu. – Pointy

+0

dzwonisz do adresu URL co 1/350 sekund. Czy możesz sprawdzić sieć, aby sprawdzić, czy to działa? –

+0

@Pointy, czyli kod przykładowy Zgaduję, napisano/zmodyfikowałem stronę serwera. Różni się więc dla każdego użytkownika/sesji. –

Odpowiedz

0

@cleric zawsze można spróbować

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

zamiast

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

. - Anthony Grist Jan 18 o 22:50

1

IE8 nie udostępnia funkcji "console.log()" jako funkcji środowiska.

+0

Konsola nie była problemem, należy przeczytać komentarze. Dzięki. –