使用POST请求但仍然响应文本不完整。为什么?
问题描述:
我只是简单地试图在这里遍历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()
}
*/
}
答
您不能在发送请求后立即使用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);
}
}
但是我使用同步机制(false)。它不应该等待open()返回? – hariom 2012-04-23 19:05:11
它应该,但使用异步机制会更好(特别是因为它允许您检查进度而不是冻结浏览器直到完成)。 – Andrea 2012-04-23 19:13:21
您是否尝试运行您的代码,导致responseText在firefox上仍然不完整。此外,我必须使用状态代码0而不是200。 https://bugzilla.mozilla.org/show_bug.cgi?id=331610 – hariom 2012-04-23 19:20:31