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