'从'xml获取数据,通过javascript输入到html(初学者)

时间:2012-02-16 06:59:39

标签: javascript html xml ajax

- 更新了代码,使其更简单 -

有点奇怪的情况,根据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,如果可能的话,你可以描述它是什么,它做了什么,如果可能的话,链接到合适的地方以了解更多信息。感谢

1 个答案:

答案 0 :(得分:0)

(这不是一个真正的答案,而是一个评论,但是我有几点我想做的,这在回答中更容易。)

您是否在浏览器中使用调试器(Firefox的FireBug扩展或Chrome或IE内置的扩展)?调试器中的控制台是否报告错误?此外,调试器还可以跟踪浏览器发出的请求。它是否显示您的要求?

有几点与您的问题无关:

  • 对w3schools要非常小心。尽管它的名字与W3C无关,但质量往往非常缺乏。
  • 你没有使用jQuery等AJAX框架的任何特殊原因? (如果您了解AJAX如何在其基础知识中运行,那么很难不使用它,但框架确实简化了所有内容。)
  • 您正在执行同步请求,这是您永远不应该做的。同步请求会阻止浏览器使其无法响应用户。
  • 您需要对document.write非常小心。它仅在页面加载期间起作用,因为您正在执行同步请求。在其他情况下,您可以使用它轻松“覆盖”您的页面。

编辑:

问题很可能是@bazmegakapa建议的:XMLHttpRequest通常仅在Web服务器上有效。您需要做的是在开发计算机上本地安装Web服务器并将其用于测试。这通常很简单。即使Apache也可以快速安装,并且运行时配置很少。或者是一个包含Apache的包,包括一个名为"AMP"的数据库服务器(MySQL)和PHP,它们通常专门用于本地网页开发和测试,并且设置得更加容易。最后,许多Web开发IDE都内置了一个简单的Web服务器(例如,我喜欢Aptana Studio)。

您正在做的通常称为"AJAX",它代表“异步JavaScript和XML”,除非您不是异步执行,您不应该这样做。看一下Mozilla开发者网络工作的简短教程如何做到正确:https://developer.mozilla.org/en/AJAX/Getting_Started

如果您仍有问题,那么您需要提供更详细的信息,最重要的是浏览器在其控制台中提供的错误消息(请参阅上面关于调试器的评论)。