IE 8-9 JavaScript проблема с длинным циклом - PullRequest
7 голосов
/ 18 января 2012

Я получил следующую проблему с 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 не может быть вызвана таким образом.Это правда?Как лучше всего выполнить мою задачу для всех браузеров?Спасибо.

Ответы [ 2 ]

1 голос
/ 24 января 2012

IE8 не предоставляет 'console.log ()' как функцию окружения.

0 голосов
/ 24 января 2012

@ cleric Всегда можно попробовать

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

вместо

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

.- Энтони Грист 18 января в 22: 50

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...