我得到了以下坚持的JS问题,只针对IE8-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中测试了这段代码,在那些浏览器中,进度条和进程总是正确完成的。但在IE8-9中,getStatus函数似乎不能以这种方式调用。是真的吗?对于所有浏览器来说,实现我的任务的最佳方法是什么?谢谢。
发布于 2012-01-24 14:28:24
@神职人员总是可以尝试
window.setTimeout(function() {getStatus(processId)},350);而不是
window.setTimeout("getStatus(" + processId + ")", 350);。-安东尼·格里斯特1月18日22:50
发布于 2012-01-24 14:16:07
IE8不提供'console.log()‘作为环境函数。
https://stackoverflow.com/questions/8912957
复制相似问题