2012-04-23 28 views
1

我只是简单地试图在这里遍历XHTML中的所有div元素http://www.w3.org/。我将HTML复制到w3c.html并运行以下代码。 但是responseText没有完成,因为我的代码失败了。使用POST请求但仍然响应文本不完整。为什么?

我最初使用GET请求,我认为这是问题(认为这是一个问题),但它仍然没有解决问题。

function traverseHtml() 
{ 
var xmlhttprequest=new XMLHttpRequest(); 
xmlhttprequest.open('POST','w3c.html',false); 
xmlhttprequest.send(null); 
var respText=xmlhttprequest.responseText; 
alert('The ResponseText is '+respText); 
/*var xml=(new DOMParser()).parseFromString(respText,'text/xml'); 
var result=xml.evaluate('//div',xml,null,XPathResult.ANY_TYPE,null); 
var node=result.iterateNext(); 
alert(node); 
while(node) 
{ 
alert(node.childNodes[0].nodeName); 
node=result.iterateNext() 
} 
*/ 
} 

回答

0

您不能在发送请求后立即使用responseText属性。你需要做一个函数,当它完成时会被调用,像这样:

var xmlhttprequest; 

xmlhttprequest = new XMLHttpRequest(); 
xmlhttprequest.open('GET', 'w3c.html', true); 
xmlhttprequest.send(); 
xmlhttprequest.onreadystatechange = function() { 
    // Check if request done and it didn't fail 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
     alert('The ResponseText is '+xmlhttp.responseText); 
    } 
} 
+0

但是我使用同步机制(false)。它不应该等待open()返回? – hariom 2012-04-23 19:05:11

+0

它应该,但使用异步机制会更好(特别是因为它允许您检查进度而不是冻结浏览器直到完成)。 – Andrea 2012-04-23 19:13:21

+0

您是否尝试运行您的代码,导致responseText在firefox上仍然不完整。此外,我必须使用状态代码0而不是200。 https://bugzilla.mozilla.org/show_bug.cgi?id=331610 – hariom 2012-04-23 19:20:31

相关问题