Javascript responseXML总是空的

Javascript responseXML总是空的,javascript,ajax,xmlhttprequest,Javascript,Ajax,Xmlhttprequest,我正在使用firefox 3.6.10和firebug进行调试 这是我的代码: var xmlhttp = new XMLHttpRequest(); xmlhttp.open("GET", url,false); xmlhttp.setRequestHeader('Content-Type', 'text/xml'); xmlhttp.send(null); alert(xmlhttp.responseXML); responseXML总是空的,我已经在不同域的几个URL上尝试过了。我也异

我正在使用firefox 3.6.10和firebug进行调试

这是我的代码:

var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", url,false);
xmlhttp.setRequestHeader('Content-Type',  'text/xml');
xmlhttp.send(null);
alert(xmlhttp.responseXML);
responseXML总是空的,我已经在不同域的几个URL上尝试过了。我也异步尝试过,结果是一样的。响应文本始终正确返回,没有问题

我的目标是获得responseXML.documentElement

谢谢你的帮助

编辑------------

这段javascript代码是从Greasemonkey用户脚本执行的,我将surte设置为与请求的url相同的来源。我还尝试从firebug控制台执行,再次确保了源策略。两者都有相同的错误。

我讨厌javascript。

我打赌你违反了同一来源的政策

对于XHR,您必须具有相同的协议、域、端口等。因此,如果您在localhost:8080/app上运行应用程序,则无法将ajax发送到www.cnn.com


不同的浏览器处理方式不同;我看到FF执行了您所描述的操作,即请求似乎正常返回,但没有数据…

除了已经提到的跨域问题之外,
responseXML
需要完全有效的XML,并且从服务器发送的响应头中可能包含正确的
内容类型。普通网站不太可能满足上述任何一项要求

对于后一个问题,您可以使用

xmlhttp.overrideMimeType('application/xml');

在发送请求以强制将响应解释为XML之前。但是,如果响应不是有效的XML,您只会得到
null

如果我没有记错的话,这是firefox的一个已知问题(我以前也遇到过同样的问题)

解决方法是将responseText解析回XML文档,然后使用它

大概是这样的:

var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlhttp.responseText, "application/xml");

尝试直接在浏览器中打开
url
的值。您应该会得到一些错误信息。
如果看到解析错误,很可能是编码错误,并且XML中有一个特殊字符使其无效

为了避免这种情况,您需要确保所有链都正确编码

如果它是静态XML文件,则在保存时需要正确设置编辑器编码。完成这一切(几乎)的编码是UTF-8,它通常是您可以在编辑器设置或“保存”对话框中选择的属性

如果是动态生成的。您的数据、页面和服务器响应也必须正确编码。您的XML以

您可以首先尝试使用非常基本的静态XML:

<?xml version="1.0" encoding="UTF-8"?><root>hi</root>
hi

然后一个接一个地添加步骤,让它像你的一样,而不会破坏它。

在这几个小时里一直在胡闹,最后发现了一个愚蠢的小错误,把我搞砸了

如果你像我一样,你喜欢把你的JavaScript代码保存在一个外部的“.js”文件中

因此,使用xmlhttp.open(“GET”,“yourxmlfile.xml”,false)将始终搜索相对于HTML文档的xml文件,即使代码位于外部JavaScript文件中

如果responseText返回null,则在指定的路径位置找不到本地文件。 如果async设置为true,则将创建文件,响应文本将包含空XML文档的内容

例如:

xmlDoc=xmlhttp.responseText//字符串数据类型

        or
xmlDoc=xmlhttp.responseXML//XML数据类型

        or
  • folder1=folder2,index.html
  • folder2=index.js,yourxmlfile.xml
  • 从HTML=“folder2/yourxmlfile.XML”而不是“yourxmlfile.XML”到XML的路径
并记住在打开后和发送请求之前,将XML文档解析为“text/XML”

例如:

  • 重写emimetype('text/xml')
  • Chrome:xmlDoc=(新的DOMParser()).parseFromString(xmlDoc,“text/xml”)
      对我来说,这是一个简单的问题。我的xml/php文件中存在语法错误。 当我在浏览器中查看文件时,浏览器没有检测到任何错误


      确保XML文档中的元素已正确关闭

      任何类型的格式错误的XML都会导致此问题。例如,我有一个属性
      renderer
      (没有
      =“something”
      ),该属性无效,并导致
      DOMParser
      ——由
      XMLHTTPRequest
      调用。因此,
      load
      事件将包含文本响应,但不包含XML。

      我很难找到正确的XML示例。如果得到null,请尝试XML验证程序。对我来说,
      元素丢失了

      <root>
      <info><p>Array
      (
      )
      </p>
      </info>
      <itemData>{"id":"40","client_id":"1","nameUnique":"Lore ipsum","description":null,"userComment":null,"last_modified":"2018-12-15 02:48:57"}    </itemData>
      </root>
      
      
      排列
      (
      )
      

      {“id”:“40”,“client_id”:“1”,“nameUnique”:“Lore ipsum”,“description”:null,“userComment”:null,“last_modified”:“2018-12-15 02:48:57”}
      我也有同样的问题

      var xmlhttp = new XMLHttpRequest();
      xmlhttp.open("GET", url,false);
      xmlhttp.setRequestHeader('Content-Type',  'text/xml');
      
      xmlhttp.responseType = "document";
      
      xmlhttp.send(null);
      alert(xmlhttp.responseXML);
      
      将responseType“document”行添加到代码中以修复此问题。介于open和send方法之间

      参考:(参见用法)

      此javascript代码是从Greasemonkey用户脚本执行的,我将surte设置为与请求的url相同的来源。我还尝试从firebug控制台执行,再次确保了源策略。两个都有同样的错误,你是对的。这方面有一些解决方法,我以后可能会检查它们。所以,我想我必须使用正则表达式来获取dom元素及其属性?因为你在Firefox中使用的是私有代码,请查看此页面:他们将整个html文档解析为dom的解决方案对我不起作用。我用的是greasemonkey,它应该对这个有一些影响。无论如何,他们的解决方案很复杂,我可能会再试一次。我最好开始挖掘正则表达式。不幸的是,无法在vba中完成重写EMIMETYPE:(@John”“From:DOMParser可用于解析XML文本的字符串和流。它不能用于解析HTML“标记汤”。但是,同一页面上的链接应该为您指明正确的方向。显然:您试图读取的应该是正确的XML。我就是这样使用它的