进度条使用多个ajax调用asp.net

时间:2013-11-10 20:28:17

标签: javascript asp.net ajax

我的应用程序在代码后面有很长时间的处理。 我正在考虑通过从javascript调用页面开始长时间的处理,

    function OnCopy(type){
    var xmlhttp;
    if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    }
    else {// code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function(){
        if (xmlhttp.readyState==4 && xmlhttp.status==200){
        //window.clearInterval(interval_handler);
        alert('done');
        }
    }
    xmlhttp.open("GET", "<%=Request.Path %>?copy=" + type, true);
    xmlhttp.send();
    interval_handler = window.setInterval(OnCheckStatus, 1000);   
}

此函数的最后一行将启动一个计时器,以检查每一秒的状态:

    function OnCheckStatus(){
    var xmlhttp;
    if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    }
    else {// code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function(){
        if (xmlhttp.readyState==4 && xmlhttp.status==200){
            //window.clearInterval(interval_handler);
            //var result = eval(xmlhttp.responseText);
            //var pb = document.getElementById('progressbar_' + result[0]);
            //if(pb != null)
            //    pb.innerHTML = result[1] + ' % - ' + result[2];
            debug++;
            var pb = document.getElementById('progressbar_test');
            pb.innerHTML = debug;
        }
    }

    xmlhttp.open("GET", "<%=Request.Path %>?checkstatus=1", true);
    xmlhttp.send();
}

在代码背后我有这个长时间处理功能并检查状态功能:

    private void Copy(string type)
    {
        Application["ProgressBar.Type"] = type;

        for (int i = 0; i < 100; i++)
        {
            System.Threading.Thread.Sleep(100);
            Application["ProgressBar.Value"] = i.ToString();
        }

        Application["ProgressBar.Type"] = null;
        Application["ProgressBar.Value"] = null;
    }

    private void CheckStatus()
    {
        Response.Clear();

        string type = (string)Application["ProgressBar.Type"];
        string value = (string)Application["ProgressBar.Value"];

        if (type == null) type = "";
        if (value == null) value = "";

        string response = "['" + type + "','" + value + "','" + DateTime.Now.ToString("HH:mm:ss") + "']";
        Response.Write(response);
        Response.End();
    }

现在,问题是在Copy函数没有完成之前,CheckStatus函数没有从代码后面的答案(我认为所有调用都排队),但是,当完成时,显示的调试值从10,直接,就像这10个电话的所有答案同时出现一样。 就像ASP.NET只是一次只响应一个来自浏览器的呼叫。我的印象是服务器将同时处理来自同一浏览器的至少2个电话。

请帮帮我吗?

1 个答案:

答案 0 :(得分:0)

请检查this article。我认为它可以帮助您解决问题。 但是,asp.net webforms中还有一个名为UpdateProgress msdn link with example

的集成解决方案