我做一个收邮件系统。需要请求两个页面达到不刷新效果,如请求a页面让他去下载邮件,请求b页面让它发回已经收取的状态。再在a里面定义一个全局application,b页面根据这个application来响应。例如a收到10封邮件的时候b应该发回来10封.但是我做出来的只能在a全部下载完成后才响应我对b页面的请求,请高手指点我应该怎么做>?
100分高分求解.
谢谢大家

解决方案 »

  1.   

    很异步啊:) 呵呵
    a收a的,b发b的,不需要用户象等待大多数油箱一样等全部接受完了才能看到嘛.
      

  2.   

    我觉得这部分取决于你邮件的收发队列机制,ajax只根据得到的队列内容来刷新页面,跟ajax没什么关系吧。
    说一下你的邮件收发机制和处理方式,可能会有帮助
      

  3.   

    A页面接受一个request后, 启动下载邮件线程, B页面接受request后启动回传邮件线程, 状态变量定义再全局部分, 注意读写这个变量时要加锁。
      

  4.   

    a.aspx::
    a = pop.Messages[i].FromName;
    if(a != null&&a.ToLower().IndexOf("gb2312?") != -1)
    {
    a = a.Substring(11,a.Length-13);
    a = DeCode(a);
    }
    a += pop.Messages[i].From;
    if(a != null&&a.ToLower().IndexOf("gb2312?") != -1)
    {
    a = a.Substring(11,a.Length-13);
    a = DeCode(a);
    }
    if(pop.Messages[i].Subject!=null)
    b = pop.Messages[i].Subject;
    else
    b = "<无>";
    if(b.ToLower().IndexOf("gb2312") != -1)
    {
    b = b.Substring(11,b.Length-13);
    b = DeCode(b);
    }
    if(a != null&&a.ToUpper().IndexOf("UTF") != -1)
    {
    a = a.Substring(a.IndexOf("B?")+2,a.IndexOf("?=")-a.IndexOf("B?")-2);
    a = base64(a);
    b = utf(b);
    }
    c = pop.Messages[i].Date.ToString();这是我收邮件的代码,其中有些是为了解码用的,大家不要管他。
    b.aspxApplication.Lock();
    string cString = (string)Application["g_xml"];
    Application.UnLock();
    Response.Clear();
    Response.ContentType = "text/xml";
    Response.Write(cString);
    Response.End();
    js代码::<script language="javascript">
    var XmlReq,XmlReq1;
    var f = 18;
    var act;
    var AjaxServerPageName = "server.aspx",AjaxServerPageName1 = "server3.aspx";
    function CreateXmlReq()
    {
    try
    {
    XmlReq = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch(e)
    {
    try
    {
    XmlReq = new ActiveXObject("Microsoft.XMLHTTP");
    }
    catch(oc)
    {
    XmlReq = null;
    }
    }
    if(!XmlReq && typeof XMLHttpRequest != "undefined") 
    {
    XmlReq = new XMLHttpRequest();
    }
    }
    function CreateXmlReq1()
    {
    try
    {
    XmlReq1 = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch(e)
    {
    try
    {
    XmlReq1 = new ActiveXObject("Microsoft.XMLHTTP");
    }
    catch(oc)
    {
    XmlReq1 = null;
    }
    }
    if(!XmlReq1 && typeof XMLHttpRequest != "undefined") 
    {
    XmlReq1 = new XMLHttpRequest();
    }
    }
    function onloadaaa()
    {
    imgtbl.style.visibility = 'visible';
    var requestUrl = AjaxServerPageName;
    CreateXmlReq();
    if(XmlReq)
    {
    XmlReq.onreadystatechange = abc;
    XmlReq.open("get",requestUrl,true);
    XmlReq.send();
    }
    act=window.setInterval(aaa,1000);
    }
    function abc()
    {
    }
    function aaa()
    {
    if(document.getElementById("Table1").rows.length>=17)
    {
    window.clearInterval(act);
    return;
    }
    CreateXmlReq1();
    var requestUrl1 = AjaxServerPageName1;
    if(XmlReq1)
    {
    XmlReq1.onreadystatechange = HandleResponse1;
    XmlReq1.open("get",requestUrl1,true);
    XmlReq1.send();
    }
    }
    function HandleResponse1()
    {
    if( XmlReq1.readyState == 4)
    {
    if( XmlReq1.status == 200)
    {
    FillTable(XmlReq1.responseXML.documentElement);
    }

    }
    }
    function FillTable(scity)
    {
    ClearTable();
    var auth = scity.getElementsByTagName('Table1'); 
    var tbl = document.getElementById('Table1').getElementsByTagName("tbody")[0];
    for(var i=0;i<auth.context.childNodes(0).parentNode.childNodes.length;i++)
    {
    var row = document.createElement("TR"); 
    row.setAttribute("className","row");
    for(var j=0;j<auth.context.childNodes(0).childNodes.length;j++)
    {
    var cell = document.createElement("TD"); 
    var div1 = document.createElement("DIV");
    div1.innerHTML ="<NOBR>"+ auth.context.childNodes(i).childNodes(j).text+"</NOBR>";
    div1.setAttribute("className","div");
    cell.appendChild(div1);
    row.appendChild(cell); 
    }
    tbl.appendChild(row)
    }
    imgtbl.style.visibility = 'hidden';
    } function ClearTable()
    {
    var tbl = document.getElementById('Table1').getElementsByTagName("tbody")[0];
    var row = tbl.rows.length;
    //for (var i=1,j=1;j<row;i++,j++)
    //{
    //if (tbl.rows.length == 2){i = 1;}
    //tbl.deleteRow(i);
    //if (tbl.rows.length == i) {i = 0;}
    //}
    for(var i = 1; i < row; i ++)
    {
    tbl.deleteRow(1);
    //alert(i);
    }
    }程序载入时就调用(onloadaaa())
    估计大家能看明白了
      

  5.   

    http://community.csdn.net/Expert/topic/5326/5326966.xml?temp=.8340876我在这个帖子里把花哨的东西简化成了一个最简单的例子,很简单的麻烦大家关注一下