Javascript:简单xml请求
我正在学习这些东西,所以我的代码可能不好看。。。但我希望能得到一些帮助:) 我没有编写以下代码,但是从其他网站上获得的:Javascript:简单xml请求,javascript,xml,Javascript,Xml,我正在学习这些东西,所以我的代码可能不好看。。。但我希望能得到一些帮助:) 我没有编写以下代码,但是从其他网站上获得的: function text_xml() { realXmlUrl="http://jumac.com/del_me_fruits.xml"; http_request = false; http_request = new XMLHttpRequest(); if (http_request.overrideMimeType) {
function text_xml()
{
realXmlUrl="http://jumac.com/del_me_fruits.xml";
http_request = false;
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType)
{
http_request.overrideMimeType('text/xml');
}
http_request.onreadystatechange = this.response_xml;
http_request.open('GET', realXmlUrl, true);
http_request.send(null);
xmlDoc = http_request.responseXML;
}
function response_xml()
{
if (self.http_request.readyState == 4)
{
document.getElementById("ex").appendChild(document.createTextNode(" Done!"));
getFruits(http_request.responseText);
}
}
function getFruits(xml) {
var fruits = xml.getElementsByTagName("fruits")[0];
if (fruits) {
var fruitsNodes = fruits.childNodes;
if (fruitsNodes) {
for (var i = 0; i < fruitsNodes.length; i++) {
var name = fruitsNodes[i].getAttribute("name");
var colour = fruitsNodes[i].getAttribute("colour");
alert("Fruit " + name + " is coloured " + colour);
}
}
}
}
我做错了什么?
responseText
是字符串,而不是XML。您正在寻找responseXML
更新
如果脚本是从不同于正在加载的XML文档()的域加载的,则XMLHttpRequest的行为将因浏览器而异
在IE 8上,它会弹出一个警告窗口,抱怨“页面正在访问不受其控制的信息。这会带来安全风险。是否要继续?”如果单击“是”,则它将正常工作(即,将加载XML并显示水果警报)
然而,在Chrome 12上,它不会弹出任何内容,并且会说“XMLHttpRequest无法加载。访问控制允许源站不允许源站”。由于此错误,请求对象的responseXML属性将为null,您将看到您遇到的错误
还有其他关于跨域XMLHttpRequest的问题,您可以从中找到如何解决您的问题,例如和
函数text_xml(){
realXmlUrl=”http://jumac.com/del_me_fruits.xml";
http_请求=false;
http_请求=新的XMLHttpRequest();
if(http_请求.overrideMimeType){
http_请求。重写emimetype('text/xml');
}
http_request.onreadystatechange=this.response_xml;
http_request.open('GET',realXmlUrl,true);
http_请求发送(空);
xmlDoc=http_request.responseXML;//这没有任何内容
}
函数响应_xml(){
if(self.http_request.readyState==4){
document.getElementById(“ex”).appendChild(document.createTextNode(“Done!”);
getFruits(http_-request.responseXML);
}
}
函数getFruits(xml){
var fruits=xml.getElementsByTagName(“fruits”)[0];
如果(水果){
var fruitsNodes=fruits.childNodes;
if(果穗){
对于(变量i=0;i
responseText
是一个字符串,而不是XML。您正在寻找responseXML
更新
如果脚本是从不同于正在加载的XML文档()的域加载的,则XMLHttpRequest的行为将因浏览器而异
在IE 8上,它会弹出一个警告窗口,抱怨“页面正在访问不受其控制的信息。这会带来安全风险。是否要继续?”如果单击“是”,则它将正常工作(即,将加载XML并显示水果警报)
然而,在Chrome 12上,它不会弹出任何内容,并且会说“XMLHttpRequest无法加载。访问控制允许源站不允许源站”。由于此错误,请求对象的responseXML属性将为null,您将看到您遇到的错误
还有其他关于跨域XMLHttpRequest的问题,您可以从中找到如何解决您的问题,例如和
函数text_xml(){
realXmlUrl=”http://jumac.com/del_me_fruits.xml";
http_请求=false;
http_请求=新的XMLHttpRequest();
if(http_请求.overrideMimeType){
http_请求。重写emimetype('text/xml');
}
http_request.onreadystatechange=this.response_xml;
http_request.open('GET',realXmlUrl,true);
http_请求发送(空);
xmlDoc=http_request.responseXML;//这没有任何内容
}
函数响应_xml(){
if(self.http_request.readyState==4){
document.getElementById(“ex”).appendChild(document.createTextNode(“Done!”);
getFruits(http_-request.responseXML);
}
}
函数getFruits(xml){
var fruits=xml.getElementsByTagName(“fruits”)[0];
如果(水果){
var fruitsNodes=fruits.childNodes;
if(果穗){
对于(变量i=0;i
考虑使用类似jquery的javascript库
jqueryajax几乎是自我解释的,您不必弄乱浏览器的兼容性 考虑使用类似jquery的javascript库
jqueryajax几乎是自我解释的,您不必弄乱浏览器的兼容性 我通常喜欢在处理任何类型的跨服务器传输数据时使用字典 提供了一种通过发送XML HTTP请求的简洁方法。
加载项目,这可以与代码分开
Proquest(“POST”,
你在这里,
数据,
标题,
RType,
忽略JSON错误,
回调);
这样您就可以轻松地编写:
Proquest(“获取”http://jumac.com/del_me_fruits.xml,跳过,{'Content-type':'text/xml'},'response',false,函数(resp){
分别
Error: xml.getElementsByTagName is not a function
<body>
<script type="text/javascript">
function text_xml() {
realXmlUrl = "http://jumac.com/del_me_fruits.xml";
http_request = false;
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType('text/xml');
}
http_request.onreadystatechange = this.response_xml;
http_request.open('GET', realXmlUrl, true);
http_request.send(null);
xmlDoc = http_request.responseXML; // this doesn't have anything
}
function response_xml() {
if (self.http_request.readyState == 4) {
document.getElementById("ex").appendChild(document.createTextNode(" Done!"));
getFruits(http_request.responseXML);
}
}
function getFruits(xml) {
var fruits = xml.getElementsByTagName("fruits")[0];
if (fruits) {
var fruitsNodes = fruits.childNodes;
if (fruitsNodes) {
for (var i = 0; i < fruitsNodes.length; i++) {
var name = fruitsNodes[i].getAttribute("name");
var colour = fruitsNodes[i].getAttribute("colour");
alert("Fruit " + name + " is coloured " + colour);
}
}
}
}
</script>
<input type="button" value="Click me" onclick="text_xml();" />
<p><div id="ex"></div></p>
</body>