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.
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
, her 1/350 saniyede bir URL çağırıyorsunuz. İşe yarayıp yaramadığını görmek için ağı kontrol ettin mi? –
@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. –