WoF*_*gel 17 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);
Run Code Online (Sandbox Code Playgroud)
responseXML总是为null,我已经尝试过来自不同域的几个URL.我也异步尝试过,结果相同.该responseText的总是正确返回,与它没有任何问题.
我的目标是获取responseXML.documentElement.
谢谢你的帮助.
编辑-----------
这个javascript代码是从Greasemonkey用户脚本执行的,我使其与所请求的URL具有相同的来源.此外,我尝试从firebug控制台执行,再次确保原始政策.两者都有相同的错误.
得讨厌javascript.
Moo*_*Goo 25
除了已经提到的跨域问题之外,还responseXML需要完全有效的XML,并且可能Content-Type在服务器发送的响应头中是正确的.普通网站不太可能满足这些要求中的任何一个.
对于后一个问题,您可以使用
xmlhttp.overrideMimeType('application/xml');
Run Code Online (Sandbox Code Playgroud)
在发送请求之前强制将响应作为XML进行交互.如果响应不是有效的XML,那么你只会得到null.
Ken*_*nny 19
如果我没记错的话,这是firefox的一个已知问题(我之前遇到过同样的问题).
修复是将responseText解析回XML文档,然后使用它.
像这样的东西:
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlhttp.responseText, "application/xml");
Run Code Online (Sandbox Code Playgroud)
我打赌你违反了相同的原产地政策.
对于XHR,您必须具有相同的协议,域,端口等.因此,如果您在localhost:8080/app上运行应用程序,则无法访问www.cnn.com.
不同的浏览器处理方式不同 我已经看到FF做你所描述的,这是请求似乎正常返回但没有数据......
尝试url直接在浏览器中打开值.你应该得到一些错误信息.
如果您看到解析错误,则可能是您的编码错误,并且您的XML中有一个特殊字符使其无效.
为避免这种情况,您需要确保所有链都已正确编码.
如果它是静态XML文件,则需要在保存时正确设置编辑器编码.完成所有操作(几乎)的编码是UTF-8,它通常是您可以在编辑器设置或保存对话框中选择的属性.
如果它是动态生成的.您的数据,页面和服务器响应也必须正确编码.而你的XML开始于<?xml version="1.0" encoding="UTF-8"?>
您可以先使用非常基本的静态XML进行尝试:
<?xml version="1.0" encoding="UTF-8"?><root>hi</root>
Run Code Online (Sandbox Code Playgroud)
然后逐步添加步骤,使其像你的一样,而不会破坏它.