C# 基于服务器端进程的AJAX进度条

C# 基于服务器端进程的AJAX进度条,c#,asp.net,ajax,loading,C#,Asp.net,Ajax,Loading,我最初的想法是创建一个会话变量,并在服务器端进程完成所有计算时对其进行更新。例如,如果它完成了1/10的主要任务,则将会话变量更新为10%。。。同时,我还有第二个AJAX请求正在检查这个会话变量,直到服务器端处理完成为止。然而,我现在读到,会话变量在我的服务器端处理页面完成之前是不可用的 我还注意到,通过这种方法,我的第二个aspx将在服务器端处理完成后加载,这是无用的,因为它在处理完成之前不会提供任何加载信息 现在,我有一个动画加载图标,但我需要一些关于服务器运行步骤的指示器 当前设置 fun

我最初的想法是创建一个会话变量,并在服务器端进程完成所有计算时对其进行更新。例如,如果它完成了1/10的主要任务,则将会话变量更新为10%。。。同时,我还有第二个AJAX请求正在检查这个会话变量,直到服务器端处理完成为止。然而,我现在读到,会话变量在我的服务器端处理页面完成之前是不可用的

我还注意到,通过这种方法,我的第二个aspx将在服务器端处理完成后加载,这是无用的,因为它在处理完成之前不会提供任何加载信息

现在,我有一个动画加载图标,但我需要一些关于服务器运行步骤的指示器

当前设置

function getComparison(result) {
    //grabs content from comparisons.aspx to show results
    $("#differenceSummary").html(result);
    //hide loading overlay image
    $("#loading").removeClass("visible");

}
基本上,我只是将comparations.aspx的内容转储到一个div中。我查看了UpdatePanel服务器控件,但这些示例似乎没有使它在这种情况下看起来有用。他们都用按钮,我需要现场直播


如果我可以向客户机返回任何关于我所使用的进程的信息(最好是1-100或某种类型),这将非常有用。

对于那些想知道我是如何完成这项工作的人,我最终完成了几个AJAX请求

我的第一个AJAX请求决定了需要发出多少请求(我有700000条DB记录,一次做30000条),并设置了加载栏。设置加载栏后,我多次点击相同的ASPX文件“X”,对于每次调用,我更新进度栏(需要一点数学知识)。一旦进度条达到100%,我将执行另一个AJAX请求,以获取服务器端处理的结果

调用comparison.aspx并将其附加到div的初始代码

$.ajax({
        url: "comparisons.aspx",
        type: "GET",
        success: getComparison,
        error: showErrors
    });

//On Success, show results
function getComparison(result) {
    //grabs content from comparisons.aspx to show results
    $("#differenceSummary").html(result);

}
当comparations.aspx首次加载时,它会加载一个空进度条,并根据我上传的文件生成信息(这是特定于我的应用程序的)。加载此页面时,AJAX请求的数量被放入javascript中

        //how many records to check at a time
        var numOfRecordsAtATime = 30000;

        //number of original/modified records

        var origNumOfRecords = parseInt($("#origNumOfRecords").text());
        var modNumOfRecords = parseInt($("#modNumOfRecords").text());
        var highestNum;
        //arithmetic to see how many AJAX calls are necessary
        if (origNumOfRecords > modNumOfRecords) {
            highestNum = origNumOfRecords;
        } else {
            highestNum = modNumOfRecords;
        }

        var numberofCallsToMake = parseInt(Math.floor(highestNum / numOfRecordsAtATime)) + 1;
        //How much the progress meter should increase at a time
        var increments = (100 / numberofCallsToMake);

        //number of records in total we've completed
        var numRecordsCompleted = 0;
        //number of times we've incremented
        var numIncrementsCompleted = 0;         


 function startAjax() {
    $("#progressbar").progressbar({
        value: 1
    });
    if (!halt) {
        while (true) {
            if (numRecordsCompleted < origNumOfRecords) {
                $.ajax({
                    url: "ajaxCall.aspx?randNo=" + Math.random(),
                    type: "GET",
                    success: doAjaxCall,
                    error: showTheError
                });
                numRecordsCompleted = numRecordsCompleted + numOfRecordsAtATime;

            } else {
                break;
            }

        }

    }

}

function doAjaxCall(result) {
    numIncrementsCompleted++;
    console.log(result);
    var progress = (parseInt(numIncrementsCompleted * increments));
    $("#progressbar").progressbar({
        value: progress
    });
    console.log(progress);
    if (progress == 100) {

        getResults();

    }
}
//一次要检查多少条记录
var numOfRecordsAtATime=30000;
//原始/修改记录的数量
var origNumOfRecords=parseInt($(“#origNumOfRecords”).text();
var modNumOfRecords=parseInt($(“#modNumOfRecords”).text();
最高变种;
//计算需要多少AJAX调用
if(origNumOfRecords>modNumOfRecords){
highestNum=记录的来源;
}否则{
highestNum=modNumOfRecords;
}
var numberofCallsToMake=parseInt(数学层(highestNum/numOfRecordsAtATime))+1;
//进度表一次应该增加多少
var增量=(100/个Callstomake);
//我们已完成的记录总数
var numRecordsCompleted=0;
//我们增加的次数
var numIncrementsCompleted=0;
函数startAjax(){
$(“#progressbar”).progressbar({
价值:1
});
如果(!停止){
while(true){
如果(numRecordsCompleted<原始记录){
$.ajax({
url:“ajaxCall.aspx?randNo=“+Math.random(),
键入:“获取”,
成功:doAjaxCall,
错误:显示错误
});
numRecordsCompleted=numRecordsCompleted+NUMOFRecordsAtime;
}否则{
打破
}
}
}
}
函数调用(结果){
numIncrementsCompleted++;
控制台日志(结果);
var progress=(parseInt(numIncrementsCompleted*增量));
$(“#progressbar”).progressbar({
价值:进步
});
控制台日志(进度);
如果(进度==100){
getResults();
}
}

您的
ajax
请求是否会带回有关服务器端进程进度的信息?我看不出进度指标是如何基于执行的
ajax
请求的数量,而不是服务器端必须完成的工作量。我添加了一些详细的代码,希望它能让我的方法更加清晰。我已经编辑了你的标题。请参阅“”,其中的共识是“不,他们不应该”。