Asp.net 显示每5秒更新的记录数作为进度,而实际更新正在进行

Asp.net 显示每5秒更新的记录数作为进度,而实际更新正在进行,asp.net,Asp.net,我有一个钮扣。当我点击一个按钮时,我正在通过jQueryAjax调用更新表中的数据,这需要15到20分钟。在我的更新逻辑中,我使用批量收集概念,一次更新5000条记录,并且我正在更新另一个日志表,在该日志表中,我更新了每次5000条记录更新后更新的记录总数 我的要求是,当实际更新正在进行时,我希望以渐进方式向用户显示更新的记录数。 为了显示计数,我使用了Javascript setInterval函数,该函数使用jquery ajax调用获取每5秒的计数,并在label中显示计数。我把我的代码放

我有一个钮扣。当我点击一个按钮时,我正在通过jQueryAjax调用更新表中的数据,这需要15到20分钟。在我的更新逻辑中,我使用批量收集概念,一次更新5000条记录,并且我正在更新另一个日志表,在该日志表中,我更新了每次5000条记录更新后更新的记录总数

我的要求是,当实际更新正在进行时,我希望以渐进方式向用户显示更新的记录数。 为了显示计数,我使用了Javascript setInterval函数,该函数使用jquery ajax调用获取每5秒的计数,并在label中显示计数。我把我的代码放在下面

<script type="text/javascript">
    var x;
    function Showdialog() {
        //alert('called');
        var sAppId = $("#<%=hdnAppid.ClientID %> ").val();
        //debugger;
        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "AutoReconWithProgress.aspx/UpdateData",
            data: "{'sAppId':'" + sAppId + "'}",
            async: true,
            cache: false,
            dataType: "json",
            beforeSend: function () {
                $("#ctl00_middleContent_divLoader").dialog(
                   {
                       modal: true,
                       width: 300,
                       height: 200,
                       buttons: {
                           Close: function () {
                               clearInterval(x);
                               $("#ctl00_middleContent_divLoader").dialog('close');
                           }
                       }
                   }
                   );
                x = setInterval(autoReconCount, 5000);
            },
            complete: function () {
                $("#ctl00_middleContent_divLoader").dialog('close');
                clearInterval(x);
            },
            success: function (data) {
                if (typeof data.d !== "undefined") {
                    $("[id$='ctl00_middleContent_lblThread2']").html(data.d);
                }
            },
            error: function (result) {
                alert("Error");
            }
        });

    }

    function autoReconCount() {
                var sAppId = $("#<%=hdnAppid.ClientID %> ").val();
                //debugger;
                $.ajax({
                    type: "POST",
                    contentType: "application/json; charset=utf-8",
                    url: "AutoReconWithProgress.aspx/GetAutoCount",
                    data: "{'sAppId':'" + sAppId + "'}",
                    async: true,
                    cache: false,
                    dataType: "json",
                    success: function (data) {
                        if (typeof data.d !== "undefined") {                                
                            $("#lblCount").html(data.d);

                        }
                    },
                    error: function (result) {
                        alert("Error");
                    }
                });

            }
</script>

<div id="divLoader" title="Please Wait" runat="server" style="display: none">
    <center>
        <span style="font-size: medium; font-family: Zurich BT;">Auto Reconciliation is in progress..</span>
        <br />
        <span style="font-size: medium; font-family: Zurich BT;">Reconciled Count: </span>
        <asp:Label ID="lblCount"  runat="server" CssClass="labelText" ClientIDMode="Static" ></asp:Label>
    </center>
</div>

<asp:Button CssClass="buttonCs" ID="btnSubmitAuto" Text="Auto Reconciliation" runat="server"
                        OnClientClick="Showdialog(); return false;" />  

var x;
函数Showdialog(){
//警报(“被呼叫”);
var sAppId=$(“#”)val();
//调试器;
$.ajax({
类型:“POST”,
contentType:“应用程序/json;字符集=utf-8”,
url:“AutoReconWithProgress.aspx/UpdateData”,
数据:“{'sAppId':'”+sAppId+“}”,
async:true,
cache:false,
数据类型:“json”,
beforeSend:函数(){
$(“#ctl00_middleContent_divLoader”)。对话框(
{
莫代尔:是的,
宽度:300,
身高:200,
按钮:{
关闭:函数(){
净间隔(x);
$(“#ctl00_middleContent_divLoader”)。对话框('close');
}
}
}
);
x=设定间隔(自动经济计数,5000);
},
完成:函数(){
$(“#ctl00_middleContent_divLoader”)。对话框('close');
净间隔(x);
},
成功:功能(数据){
if(数据类型d!=“未定义”){
$(“[id$='ctl00\u middleContent\u lblThread2']”)html(data.d);
}
},
错误:函数(结果){
警报(“错误”);
}
});
}
函数autoeconcount(){
var sAppId=$(“#”)val();
//调试器;
$.ajax({
类型:“POST”,
contentType:“应用程序/json;字符集=utf-8”,
url:“AutoReconWithProgress.aspx/GetAutoCount”,
数据:“{'sAppId':'”+sAppId+“}”,
async:true,
cache:false,
数据类型:“json”,
成功:功能(数据){
if(typeof data.d!=“未定义”){
$(“#lblCount”).html(data.d);
}
},
错误:函数(结果){
警报(“错误”);
}
});
}
正在进行自动对账。。

已对账计数:
当我点击按钮时,我调用showdialog函数。在“发送前”事件中,我打开了一个对话框,在该对话框中,我可以显示动态更新计数

AutoReconWithProgress.aspx/UpdateData url用于更新数据。
我的问题我的动态更新计数在实际通话结束后显示。
我的要求是,当实际更新正在进行时,我希望动态显示更新的记录计数。
请指导我。

如果您在检查AJAX请求时做了些什么。例如:

var req; //receives the XMLHttpRequest

while(req.status != 200){
    autoReconCount();
}

虽然请求没有返回成功代码200,但它会继续运行函数autoeconcount(),如果您愿意,您可以像上面一样设置间隔

您的用户将坐着看屏幕20分钟?你确定这是正确的方法吗?是的,这只是业务要求。我已经在发送前事件中设置了间隔,以获得每5秒的更新计数。在调试时,这行调用方法autoeconcount?????x=设定间隔(自动经济计数,5000);谢谢你的帮助。我尝试设置间隔函数x=setInterval(autoeconcount,5000);自动计数();函数在主函数Showdialog()完成后开始执行。因此,在所有进程完成后都会显示count。我给您的建议是删除SetInterval并花一段时间检查HTTP调用的状态,然后调用autorecoount函数。根据我在代码中看到的情况,在BeforeSend中只调用了一次autorecoount函数。您需要调用它,直到HTTP请求完成。我认为While可以解决这个问题