バックグラウンドと同期:アップロード/インポートの進捗状況をリアルタイムで確認



 
  

, csv 。 , , , csv 10 , 10 , 2 30 10 , 。 , ( , ), ( )。 , 1000 , 4 , 。 , 。 , 。。。 , 。

html , csv , form.submit , formObj 。

: XMLHttpRequest 

( http://blog.csdn.net/qinpeng100423/article/details/8637797

http://blog.csdn.net/liujiahan629629/article/details/17126727)

-- -- -- 1.     //

    function GetXmlHttpObject()
    {
      var xmlHttp=null;
      try
      {
        // Firefox, Opera 8.0+, Safari
        xmlHttp=new XMLHttpRequest();
      }
      catch (e)
      {
        // Internet Explorer
        try
        {
          xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e)
        {
          xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
      }
      return xmlHttp;
    }

2.コールバックメソッドの
var xhr = new window.XMLHttpRequest(); 
        
        xhr.onreadystatechange = function(){ 
            if(xhr.readyState > 2){ 
                var tmpText = xhr.responseText.substring(oldSize); 
                oldSize = xhr.responseText.length; 
                if(tmpText.length > 0 ){ 
                //      
                t.innerHTML = tmpText + "/6"; 
                //       
                var width = parseInt(tmpText)/6*300; 
                bg.style.width = width+"px"; 
                } 
            } 
            if(xhr.readyState == 4){ 
            //        
                t.innerHTML = "    "; 
                bg.style.width = "300px"; 
            } 
        } 

3.サーバと するパラメータの
 xhr.open("get",url); 
 xhr.setRequestHeader("Content-type","application/x-www-four-urlencoded");  

4.サーバへのデータ
var xmlMessage = buildPOST(frm);// を て
xhr.send(xmlMessage);
で が つかりました. するときにフォームを って かないで、フォームのnameをサーバーに える を つけました.
 function buildPOST(theFormName) {
        var theForm=new Array();
        theForm = document.getElementById("frm") ;
        var qs = ''
        for (e=0;e

フォームが できてからまた しい にぶつかって、 は できなくて、、、これはまた のモジュールで、 えにくいです.
プログラムをよく て、 の を えました.クライアント・ループでクエリー・リクエストを し、データがある は バーを します.
Aクラスはページ にオブジェクトを し、Bはメソッドを び すときに するので、 をAクラスに し、AクラスをBクラスのメンバー に します.このようにAが するとカウントできます.
な き は のとおりです.
htmlの


JSの
//  Excel    
    function ImportAttachment()
    {
        $("#pageloading").show();
        var url = '';	
        var frm = window.document.frm;
        frm.action = url;
        frm.submit();
        window.setInterval(refreshDiv,1000); //     
    }
//     
    function refreshDiv(){
        var url="AAAAA.dll?page=AAAAAA&pcmd=getMsgid";
    	
        var httpRet = AjaxHttpGet(url);
        var xmlRet = Xparse(httpRet);	
        var checkCount = xmlRet.getValueByName("checkCount");
        var sumCount = xmlRet.getValueByName("sumCount");
        var insertCount = xmlRet.getValueByName("insertCount");
        if(sumCount<1) 
            return false;
        var a = parseInt(checkCount)+2;
        mCheckProgress.value=a/sumCount*100;
        progressCheckText.innerHTML = a+"/"+sumCount; 
        mInsertProgress.value=insertCount/sumCount*100;
        progressInsertText.innerHTML = insertCount+"/"+sumCount; 
    }
サーバ
void BBBBBB::getMsgid()
{
	m_webPage & ""& cFileImportProc->sumCount &"";
	m_webPage & ""& cFileImportProc->checkCount &"";
	m_webPage & ""& cFileImportProc->insertCount &"";
	return;
}

これで できます