Я получил следующую проблему с JS только для IE 8-9, в других браузерах мой код работал очень хорошо.
Случай: у меня есть следующий код в JS, который должен запустить какой-нибудь серверный процесс и обновить индикатор выполнения со статусом на стороне сервера, что обеспечивает пользовательский интерфейс Jquery:
$("#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");
};
});
}
В Метод StartLongProcess в текущем контроллере. Я запускаю длинный процесс сервера следующим образом: ..
[ValidateInput(false)]
public void StartLongProcess(Guid[] userIds)
{
...
var processTask = new LongProcess(MesssageService.Email.SendMails);
processTask.BeginInvoke(service.LongProcess(userIds), new AsyncCallback(EndSendingProcess), processTask);
}
Метод, который читает текущее состояние, следующий:
/// <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);
}
Я тестировал этот код вChrome и FF, в этих браузерах прогресс-бар и процесс всегда завершаются правильно.Но в IE 8-9 похоже, что функция getStatus не может быть вызвана таким образом.Это правда?Как лучше всего выполнить мою задачу для всех браузеров?Спасибо.