var xml = xmlParse(Request.sendGET("default.xml", gexml).responseText);
var xslt =xmlParse(Request.sendGET("default.xsl", gexml).responseText);  
function gexml(response) 
{
        var feedResponse;
feedResponse = response;
if (response.responseText == '' || response.responseXML.documentElement==null || response.responseXML.documentElement.nodeName=="parsererror") 
{ // si le flux n'est pas valide
callBack(feedResponse, feedUrl);
}
 
}

解决方案 »

  1.   

    ar Request = new Object();
    Request.send = function(url, method, callback, data) {
    var req;
    if (window.XMLHttpRequest) {
    req = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
    req = new ActiveXObject("Msxml2.XMLHTTP");
    }
    req.onreadystatechange = function() {
    if (req.readyState == 4)
     {// only if req shows "loaded"
    if (req.status < 400) 
       {// only if "OK"
      (method=="POST") ? callback(req) : callback(req,data);
        } 
        else
         {
          alert("您所请求的页面有异常);
         }
       }
      

  2.   

    csdn真是麻烦非要分开发才行...
          }
    if (method=="POST") {
    req.open("POST", url, true);
    req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    //req.setRequestHeader('Connection','close'); //STUPID 400 FF ERROR FIX
    req.send(data);
    } else {
    req.open("GET", url, true);
    req.send(null);
    }

    return req;
    }Request.sendPOST = function(url, data, callback) {
    Request.send(url, "POST", callback, data);
    }
    Request.sendGET = function(url, callback, args) {
    return Request.send(url, "GET", callback, args);
    }
      

  3.   

    status 
    从服务器返回的数字代码,比如404(未找到)或200(就绪) 现在processVoteResponse()函数开始显示出其意义了。它首先检查XmlHttpRequest的整体状态以保证它已经完成(readyStatus == 4),然后根据服务器的设定询问请求状态。如果一切正常(status == 200),就使用innerHTML属性重写DOM的“votes”节点的内容
    status == 200  你查查function updatePage() {
       if (request.readyState == 4) {
         if (request.status == 200) {
           var response = request.responseText.split("|");
           document.getElementById("order").value = response[0];
           document.getElementById("address").innerHTML =
             response[1].replace(/\n/g, "<br />");
         } else
           alert("status is " + request.status);
       }
     }
      

  4.   

    我跟踪调试发现应是数据没有读取完
    status == 200 数据表示读取完
      

  5.   

    status == 200 表示数据读取完
    不知是不是这个原因,没用过ajax
      

  6.   


    我用这句已经可以达到目的  if (req.status < 400) 
    现在问题是如果是异步时,一般Request.send 会运行几次才能达到req.readyState == 4,将数据完全取出。
      

  7.   

    你把你的代码和xml给贴出来
    上面给得不全吧!
      

  8.   

    http://gqlyxg1981.blogchina.com/2551914.html<400  有很多情况
      

  9.   

    已经很全了我将js已贴出了,xml自己随便找一个就行了
    var xml = xmlParse(Request.sendGET("default.xml", gexml).responseText);
    var xslt =xmlParse(Request.sendGET("default.xsl", gexml).responseText);  
    是调用
    其它只要放在js区里就行了。
      

  10.   

    我也修改过 req.status == 200 ,但情况依旧,所以因不是这里的原因。
      

  11.   

    <script>
    var oDiv
    var xh
    function getXML()
    {
    oDiv = document.all.m
    oDiv.innerHTML = "正在装载栏目数据,请稍侯......."
    oDiv.style.display= ""
    xh = new ActiveXObject("Microsoft.XMLHTTP")
    xh.onreadystatechange = getReady
    xh.open("GET",a.value,true)
    xh.send()}function getReady()
    {
    if(xh.readyState==4)
    {
    if(xh.status==200)
    { oDiv.innerHTML = "完成"
    }
    else
    {
    oDiv.innerHTML = "抱歉,装载数据失败。原因:" + xh.statusText
    }
    }
    }
    </script>
    <body>
    xmlhttp异步的例子:
    URL:<input name=a value="http://www.microsoft.com" style="width:600px">
    <input onclick="getXML()" type="button" value="得到源代码">
    <input onclick="if(xh && xh.responseText) {alert(xh.responseText);oDiv.innerHTML=xh.responseText}" type="button" value="显示源代码">
    <div id=m></div>
      

  12.   

    <SCRIPT LANGUAGE="JavaScript">
     
    function getData()
    {
    var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); // 异步调用 
    xmlhttp.onreadystatechange = function()
    {
    if (xmlhttp.readyState == 4) // 调用完毕
    {
    if (xmlhttp.status == 200) // 加载成功
    {
    var xmldoc = xmlhttp.responseXML;
    var root = xmldoc.documentElement; alert (xmldoc.xml);
    }
    }
    } var url = 'xml.asp';
    xmlhttp.open("get", url, true);
    xmlhttp.send();
    }
     
    </SCRIPT>
     <BODY>异步调用 xmlhttp 取后台数据
    <input type="button" value="GetData" onclick="getData()"> <%
    dim i, xmlxml = "<?xml version='1.0' encoding='gb2312' ?>"
    xml = xml & "<data>"for i = 1 to 50
    xml = xml & "<record>记录" & i & "</record>"
    nextxml = xml & "</data>"response.ContentType = "text/xml"
    response.write xml
    %>
      

  13.   

    superdullwolf(超级大笨狼,每天要自强,MVP) ( ) 信誉:154  2006-08-21 04:30:00 
    这么早?
    一个简单的AJAX框架:http://xkr.us/code/javascript/XHConn/
      

  14.   

    是一个时序问题:
    注意你这里的调用Request.sendGET("default.xml", gexml).responseText
    Request.sendGET("default.xml", gexml)返回的是当然HTTPRequestXML对象,返回后你马上就调用它的responseText属性很显然是不对的,尽管你在send方法中设置了onreadystate方法说当if (req.readyState == 4)才调用,但是这个是不管用的。因为前者是按照js语句顺序执行,而后者是按照事件机制执行,前者在sendGET函数执行完毕就执行,后者则在xml文档完全返回才执行,这样就造成了一个很普通的时序问题。
    按照楼主的使用,你的send函数实际上等效于(我在后面添加了一行注意看):
    Request.send = function(url, method, callback, data) {
    var req;
    if (window.XMLHttpRequest) {
    req = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
    req = new ActiveXObject("Msxml2.XMLHTTP");
    }
    req.onreadystatechange = function() {
    if (req.readyState == 4)
     {// only if req shows "loaded"
    if (req.status < 400) 
       {// only if "OK"
      (method=="POST") ? callback(req) : callback(req,data);
        } 
        else
         {
          alert("您所请求的页面有异常);
         }
       }
     }
    if (method=="POST") {
    req.open("POST", url, true);
    req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    //req.setRequestHeader('Connection','close'); //STUPID 400 FF ERROR FIX
    req.send(data);
    } else {
    req.open("GET", url, true);
    req.send(null);
    }
    alert(req+"||"+req.response);        //注意这里,你实际上等效于在这里调用  
                                    req.response,但是由于这里加了个alert中断,所以时序
                                    问题反而被解决,因此如果你在本机上调试,一般错误可
                                    能不再出现
    return req;
    }
      

  15.   

    shenjf2000(一路走来) 正解
    既然你已经明白了异步调用,那怎么不写回调函数呢?
    responseText只应在回调函数及后续程序中使用,不知道我说的你明白没。
      

  16.   

    同xml文件大小等没有关系,很明显就是时序的问题,根据楼主的写法是不可能正常的。感觉楼主没有真正理解ajax的用法(或者说没有理解javascript),只是根据一些资料照搬语句写应用。建议楼主对ajax特点和js语法再找点文档看看,磨刀不负砍柴功,否则解决了这个问题又有新的问题。
      

  17.   

    shenjf2000(一路走来)
    我测试了一下的确如果加入一个alert程序不会出错,但最终解决方法哪位有,我现在需要的是解决这个问题
      

  18.   

    对,就是时序问题,楼主,你整个的思路有问题!如果你坚持使用
    var xml = xmlParse(Request.sendGET("default.xml", gexml).responseText);
    var xslt =xmlParse(Request.sendGET("default.xsl", gexml).responseText);
    的方式,这个问题我觉得基本上无解,不知道是否有哪位高手有办法解决。我的解决方法是(这个方法似乎不是最好的,但是大致解决这个时序问题,如果需要一个较好的解决这个问题需要详细了解你的目的,不过我的JS也不是很好,所以暂时就不提供了):
    var xml="";
    Request.sendGET("default.xml", gexml);    //只发请求不马上处理,处理在另外一个函数中
    Request.sendGET("default.xsl", gexml);    //只发请求不马上处理,处理在另外一个函数中function gexml(response) 
    {
         var feedResponse;
         feedResponse = response;
         if (response.responseText == '' || response.responseXML.documentElement==null 
             || response.responseXML.documentElement.nodeName=="parsererror") 
         { // si le flux n'est pas valide
           callBack(feedResponse, feedUrl);
         }
         else     //这里为我添加的,实际上你对reponseText处理似乎应该放在这里
         {
             xml=xmlParse(response.responseText);//注意这里没有区分xml和xslt,楼主自己斟
                                                   酌着弄吧,我觉得你的这段代码不是简单修
                                                   改就可以
         } 
    }
      

  19.   

    我想问一下有没什么延时机制或代码做到alert这样的效果,避免 xmlhttp 对象还没有调用完成,就将它作为结果传给另一个方法了。
      

  20.   

    在js中做这种延时是很难的,因为你无法估计在网络中XMLHTTP对象调用完成究竟需要多长时间,再说js也没有sleep的概念。另外一个层面上考虑,这样做也是及其不合理!
      

  21.   

    延时机制?你知道延时多久保证不出错吗?
    正确的解决方法是检测返回的状态。 xmlhttp 对象还没有调用完成,就将它作为结果传给另一个方法了?
    只能说明你的方法有问题