gpt4 book ai didi

javascript - 使用 JavaScript 和 XHTML : XMLHttpRequest's open/send do not work if before onreadystatechange

转载 作者:行者123 更新时间:2023-11-29 16:28:05 33 4
gpt4 key购买 nike

我不知道它是否“有效”,但我得出这样的结论,因为这里发布的代码仅在两次之后才有效(除了 for 循环(愚蠢的 DOM)中的内容,但这不是重点)点击次数。我假设这是因为在创建 XML 文档之前,它是在第一次单击结束时才获取的。

但是,如果我将 XMLhttpRequest.open 和 XMLHttpRequest.send 方法放在 onreadystatechange 函数之前,则代码将不会在嵌套的 if 语句(检查readystate/status 的语句)内执行。我已经用alert或document.write对此进行了测试。

知道出了什么问题吗?

if (window.XMLHttpRequest)
{
var xmlhttp = new XMLHttpRequest();
}

function lessonList()
{
var xmldoc = xmlhttp.responseXML;

xmlhttp.onreadystatechange = function()
{
if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
var getTitle = xmldoc.getElementsByTagName('title');
var lessonList = document.getElementById('lesson-list');

for (i = 0; i < getTitle.length; i++)
{
var lessonTitle = document.createElement('li');
lessonTitle.nodeValue = getTitle[i].childNodes[0].nodeValue;

lessonList.appendChild(lessonTitle);
}
}
};

xmlhttp.open("GET", 'file.xml', true);
xmlhttp.send(null);
}

最佳答案

+1 Idealmachine 的答案。需要澄清的是,没有一个 Document 实例与单个 XMLHttpRequest 关联,其中从响应加载 XML 只会更新文档的内容。这与调用 Document.load() 不同。

相反,当发送请求时,XMLHttpRequest 对象会删除其 responseXML 引用的旧 Document,并且当收到响应后,它会使用响应创建一个新的 Document 实例。如果您保留对 responseXML 旧值的引用,它仍然是有效的 Document,但它是来自上一个响应的旧 XML 文档,而不是新文档。

另外记住 for 循环中的 var i 以避免意外的全局。并且在 Element 节点上设置 nodeValue 是没有意义的;您需要 document.createTextNode(string) 并附加它。

您通常会使用辅助函数来获取/设置元素的文本内容,因为传统 DOM 让它变得非常痛苦。 DOM Level 3 Core 的 element.textContent 属性是最简单的方法,但它在 IE 或某些较旧的浏览器中不存在。

关于javascript - 使用 JavaScript 和 XHTML : XMLHttpRequest's open/send do not work if before onreadystatechange,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3928997/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com