jquery - ASP.NET - jQuery ajax 调用队列而不是同时运行?

标签 jquery asp.net ajax

我必须对用户加载的文件进行一些处理。根据文件中的页数,此过程可能需要很长时间。我计划使用 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 请求返回时触发。这意味着您仅在处理完成后才检查进度。

Take a look at this StackOverflow answer

关于jquery - ASP.NET - jQuery ajax 调用队列而不是同时运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9743846/

相关文章:

javascript - 一种表单需要两个操作(一个本地,一个远程)

弹出窗口的 javascript url

asp.net - 在 session 变量中放入什么

c# - 具有动态 Entity.Property 唯一检查的通用 ValidationAttribute(在运行时设置)

javascript - trim 函数结果

jquery - jquery延迟调用的这些模式有什么区别?

jquery - SetTimeout 函数帮助

c# - 如何优化 GridView 生成的 ViewState 并保留一些 GridView 相关的功能

javascript - PHP Ajax MySQL 表行删除

php - 使用 jquery、ajax、php、mysql 关闭后永久隐藏信息框