--更新代码使之…更简单--
有点奇怪,根据w3schools的说法,我的代码应该可以工作,但由于某种原因,它没有…连接。这是我的java脚本代码。
XHTML语言
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
</head>
<body>
<p id="intro">Hello</p>
<script type="text/javascript" id="announce" src="announce.js"></script>
</body>
</html>
JavaScript
/*jscript*/
var newannouncement = document.createElement('p');
newannouncement.id = 'announcing';
newannouncement.appendChild(document.createTextNode('Here is an announcement'));
var scr = document.getElementById('announce');
scr.parentNode.insertBefore(newannouncement, scr);
if(window.XMLHttpRequest)
{
xmlhttp=new XMLHttpRequest();
} else {
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
**xmlhttp.open("GET", "catalog.xml",false);**
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;
var x=xmlDoc.getElementsByTagName("cd");
for (i=0; i<x.length; i++)
{
alert("for")
}
XML格式
<?xml version="1.0"?>
<catalog
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="catalog.xsd">
<cd>
<author>Ferdi</author>
<date>1192</date>
</cd>
<cd>
<author>JRR</author>
<date>1995</date>
</cd>
</catalog>
更新1
由于我认为前面的代码过于混乱,所以我对它进行了修改,使其更简单,这样我就可以真正找出到底是什么东西在破解。问题似乎是xmlhttp.open(),因为for循环未运行。我已经切换到xhtml,因为它使代码更易于阅读(对我来说),而且我知道document.write()不起作用。
问题
我只是直接调用函数。*表示失败的行。现在,我尝试将其保留为announce.xml(将announce.xml保留在同一个目录中),现在尝试将其向下移动。我也试过添加/。/但没有效果。
我在w3schools网站上没有看到任何“技术”要求……所以我假设它像html一样可以开箱即用。
进一步说明
如果可能的话,如果你打算推荐技术,比如AJAX,你能描述一下它是什么,它是做什么的,如果可能的话,你能提供一个链接到一个合适的地方来了解更多。谢谢
最佳答案
(这不是一个真正的答案,而是一个评论,不过我有几点我想说,这是一个更容易的答案)。
你是在浏览器中使用调试器(Firefox的FireBug扩展,还是内置在Chrome或IE中的调试器)?调试器中的控制台是否报告错误?此外,调试器允许您跟踪浏览器发出的请求。这是你的要求吗?
有几点与你的问题无关:
对w3schools要非常小心。尽管它的名字与W3C无关,而且质量通常很差。
有没有什么特别的理由不使用AJAX框架,比如jQuery?(如果您想了解AJAX的基本工作原理,那么不使用AJAX是很好的,但是框架确实简化了一切)。
你正在做一个同步请求,这是你永远不应该做的。同步请求阻止浏览器使其对用户无响应。
你需要非常小心document.write
。它只在页面加载期间工作,因为您正在执行同步请求。在其他情况下,你可以很容易地用它“覆盖”你的页面。
编辑:
问题很可能是@bazmegakapa建议的:XMLHttpRequest
通常只在web服务器上工作。您需要做的是在开发计算机上本地安装一个web服务器并使用它进行测试。这通常很简单。即使Apache也能快速安装并在很少配置的情况下运行。或者是一个带有Apache的包,其中包括一个数据库服务器(MySQL)和一个名为"AMP"的PHP,它们通常是专门为本地web页面开发和测试而设计的,而且设置起来更加简单。最后,许多web开发ide都内置了一个简单的web服务器(例如,我喜欢Aptana Studio)。
您所做的通常被称为"AJAX",它代表“异步JavaScript和XML”,但您不应该异步执行它。看一看Mozilla开发者网络上的一个简短教程如何正确操作:https://developer.mozilla.org/en/AJAX/Getting_Started
如果您仍然有问题,那么您需要提供更详细的信息,最重要的是浏览器在其控制台中给出的错误消息(请参阅上面我对调试器的评论)。