【问题标题】:Calling jQuery's .ajax() from an eventHandler in c# Asp.Net从 c# Asp.Net 中的 eventHandler 调用 jQuery 的 .ajax()
【发布时间】:2012-12-09 17:00:29
【问题描述】:

在 (upload.aspx) 后面的代码中,我有一个事件返回正在流式传输的字节数;当我调试它时,它工作正常。我想在进度条上反映从事件处理程序返回的数字,这就是我迷路的地方。我尝试使用 jQuery 的 .ajax() 函数。这就是我实现它的方式:

在我后面代码的 EventHandler 中,我添加了这段代码来调用 .ajax() 函数:

Page.ClientScript.RegisterStartupScript(this.GetType(), "UpdateProgress", "<script type='text/javascript'>updateProgress();</script>");

我的计划是,每当 eventHandler 函数更改正在流式传输的字节的值时,它都会调用 javascript 函数“updateProgress()”

.ajax() 函数“UpdateProgress()”如下:

function updateProgress() {

        $.ajax({
            type: "POST",
            url: "upload.aspx/GetData",
            data: "{}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            async: true,
            success: function (msg) {

                $("#progressbar").progressbar("option", "value", msg.d);

            }
        });
    }

我确保函数 GetData() 是 [System.Web.Services.WebMethod] 并且它也是静态的。所以我试图实现的工作流程是: - 点击上传按钮 - 后台代码开始执行并触发 EventHandler - EventHandler 调用 .ajax() 函数 - .ajax() 函数检索正在流式传输的字节并更新进度条。

当我运行代码时;一切运行良好,除了 .ajax() 仅在上传完成时执行(并且进度条也仅在完成上传时更新);即使我每次都在 eventHandler 函数中调用 .ajax() 函数,如上所示...

我做错了什么?我这样想对吗?还有什么我应该添加的可能是 updatePanel 什么的吗?

【问题讨论】:

  • upload.aspx/GetData 返回什么?
  • 它返回一个int;它是:[System.Web.Services.WebMethod] public static int GetData() { return Convert.ToInt32(byteStreamed); }
  • 一开始你有没有把进度条的默认值设置为零?像这样$("#progressbar").progressbar({ value: 0 });
  • 我在 $(document).ready(function () { $("#progressbar").progressbar({ value: 0 }); }); 中做到了

标签: c# javascript jquery ajax progress-bar


【解决方案1】:

试试这个:

$("#progressbar").progressbar({
    value: 0
});

$("#btnUpload").click(function() {
    var intervalID = setInterval(updateProgress, 250);
    $.ajax({
        type: "POST",
        url: "upload.aspx/GetData",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        async: true,
        success: function(msg) {
            $("#progressbar").progressbar("value", 100);
            clearInterval(intervalID);
        }
    });
    return false;
});

function updateProgress() {
    var value = $("#progressbar").progressbar("option", "value");
    if (value < 100) {
        $("#progressbar").progressbar("value", value + 1);
    }
}​

【讨论】:

  • 感谢您抽出时间...但是我成功添加了警报(msg);单击“确定”后,会显示一个带有“对象对象”的弹出窗口,进度条填充 100% 并且后面的代码(从 btnUpload_Click 触发)没有触发..有什么想法吗?
  • 这里有一些其他的东西可能会敲响一些钟声;当我注释掉 .ajax() 函数时,后面的代码(上传)工作正常,当我重新注释 .ajax() 时,会发生前面描述的相同情况(后面的代码不会启动并且 100% 弹出 [对象对象])
  • 删除return false;再试一次
  • 谢谢;你的回答很有帮助;我从中学到了;它确实有效;唯一的问题是进度条不会根据 eventHandler 中更改的值更新;如果文件很大,进度条会填满并且上传仍在进行中……有什么想法可以解决这个问题吗?我应该从 .ajax() 中调用 var intervalID = setInterval(updateProgress, 250); 吗?
猜你喜欢
  • 2012-02-22
  • 2013-05-13
  • 2014-01-25
  • 1970-01-01
  • 2011-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-06
相关资源
最近更新 更多