我必须对用户加载的文件进行一些处理。根据文件中的页数,此过程可能需要很长时间。我计划使用 jQuery UI 进度条并告诉用户已处理了多少页。但是,在第一个 ajax 调用完成之前,我的进度检查不会返回。两个调用都正确完成并连接到相应的 Web 方法。
我已经对此进行了一些研究,我发现 this answer另一个问题几乎指出,如果两个调用都使用 session ,它们将不会同时处理。不过,我只在其中一次调用中使用 session 。
我错过了什么?
这是开始处理文件的初始调用。我将 UpdateProgressBar 设置为在文件处理开始后运行一秒钟。
setTimeout("UpdateProgressBar();", 1000);
$.ajax({
type: "POST",
async: true,
data: // my params go here
url: // path to web method
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (result) {
// Do stuff when file is finished processing
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
if (errorThrown != null)
alert(textStatus + " : " + errorThrown);
}
});
这是 UpdateProgressBar 函数:
function UpdateProgressBar() {
$.ajax({
type: "POST",
async: true,
data: // my params go here
url: // path to web method
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (result) {
var totalPages = parseInt($('[id$=lbl_PageCount]').text());
var pagesProcessed = result.d;
var percentProcessed = pagesProcessed / totalPages;
$('#div_ProgressBar').progressbar("value", percentProcessed);
if (pagesProcessed < totalPages)
setTimeout("UpdateProgressBar();", 800);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
if (errorThrown != null)
alert(textStatus + " : " + errorThrown);
}
});
编辑:
这是 UpdateProgressBar 调用的 WebMethod。另一种 WebMethod 确实使用了 Session,但正如您所看到的,这个 WebMethod 没有使用 Session。它们都访问 dll,但是,我尝试在不使用 dll 进行更新的情况下进行测试,但没有产生任何影响。
[WebMethod]
public static int CheckPDFProcessingProgress(// params go here)
{
int pagesProcessed = 1;
try
{
OrderService _orderService = new OrderService();
pagesProcessed = _orderService.GetMailingPDFPagesProcessedProgress(PersonID);
}
catch (Exception ex)
{
// log error
}
return pagesProcessed;
}
最佳答案
我认为您的方法不会起作用,因为您调用 setTimeout("UpdateProgressBar();", 800);
作为成功事件的一部分。 success 事件仅在 ajax 请求返回时触发。这意味着您仅在处理完成后才检查进度。
关于jquery - ASP.NET - jQuery ajax 调用队列而不是同时运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9743846/