javascript错误:“data.getElementsByTagName不是函数“

2024-10-01 13:24:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我在这个愚蠢的错误上花了好几个小时,所以任何帮助都将不胜感激!在

我使用Jquery从googleappengine上托管的python文件请求xml。然后我尝试处理xml。在

以下是从firebug获得的post请求的响应:

<?xml version="1.0" encoding="ISO-8859-1"?><building key='agdhcHRydXNochALEglCdWlsZGluZ3MY3x4M' bldname='test'></building>
Status: 200 OK
Cache-Control: no-cache
Content-Type: application/xml
Content-Length: 0

下面是处理数据的javascript:

^{pr2}$

以下是我从firebug得到的错误:

data.getElementsByTagName is not a function
anonymous("<?xml version="1.0" encoding="ISO-8859-1"?><building key='agdhcHRydXNochALEglCdWlsZGluZ3MY4B4M' bldname='test'></building>\nStatus: 200 OK\r\nCache-Control: no-cache\r\nContent-Type: application/xml\r\nContent-Length: 0\r\n\r\n")viewBuilding.js (line 120)
I()jquery.min.js (line 19)
anonymous(6)jquery.min.js (line 19)
[Break on this error] alert(data.getElementsByTagName("building"));\n

我在网站的各个部分都使用了javascript来处理xml,所以我的直觉告诉我javascript是正确的,也许数据的格式是错误的?我卡住了。:/

谢谢!在


Tags: keytestversion错误linejsisook
3条回答

来自GAE服务器的响应错误。它在XML数据的下面有头,作为响应主体的一部分。这将不是一个有效的XML文档;如果头不在顶部正确显示,就没有活动的Content-Type头来告诉jQuery传入的文档是XML。因此,它向您发送纯文本数据响应,而不是您想要的XML文档。出现错误是因为您不能对String调用getElementsByTagName。在

可能GAE应用程序的作者已经忘记了如何编写WSGI应用程序,而只是将XML文档输出到标准输出:

print xml
    ...
start_response('200 OK', [('Content-Type', 'text/xml')])
return []

而不是将其正确返回到服务器进行处理:

^{pr2}$

这就解释了为什么服务器认为Content-Length是0。在

好吧,是时候检查一下清单了。在

我将假设数据被正确分配,并且您已经验证它包含您的“数据”。现在,由于它给出了一个错误:函数不存在,我们就知道它确实由于某种原因没有被找到,因为否则函数将返回一个空节点,如果它没有找到该名称的标记。在

我很好奇XML是否与javascript在同一个文件中,因为在这种情况下,您不需要指定文档,而不是数据吗?我知道我所说的场景是我在初始测试中要做的,所以我只想确定一下。在

如果使用数据引用外部XML,那么实际上应该没有问题。在

实际上,这一切似乎都是围绕着可变数据旋转的。在我看来,由于某些原因,数据要么没有引用正确的元素,要么没有引用任何内容。在

希望这有帮助, 大卫。在

使用

jQuery.post(toLoad, formInput,
  function(data, textStatus) {
    // now check if data is set and what the status is
    alert(data);
    alert(textStatus);
    //alert(data.getElementsByTagName("building"));
  },
  'xml'
);

顺便说一句,我觉得可疑的是Content-Length: 0头。在


根据您的评论,我断定生成xml的页面是假的。它首先输出xml,然后输出一些http头作为数据。这当然不是有效的xml。因此jQuery正确地确定返回的数据是文本格式。在

在输出一行xml之前,必须输出所有标题。在

相关问题 更多 >