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.
W jaki sposób kod JavaScript otrzymuje wartość identyfikatora procesu? Wygląda na to, że zawsze jest zero od powyższego kodu. – Pointy
dzwonisz do adresu URL co 1/350 sekund. Czy możesz sprawdzić sieć, aby sprawdzić, czy to działa? –
@Pointy, czyli kod przykładowy Zgaduję, napisano/zmodyfikowałem stronę serwera. Różni się więc dla każdego użytkownika/sesji. –