Javascript 从远程网站解析xml数据
我想解析来自远程网站的xml数据…但是我无法解析xml数据,我只得到了一个错误。但我能够解析来自同一远程网站的JSON数据。我用来解析xml数据的代码是:Javascript 从远程网站解析xml数据,javascript,jquery,html,xml,ajax,Javascript,Jquery,Html,Xml,Ajax,我想解析来自远程网站的xml数据…但是我无法解析xml数据,我只得到了一个错误。但我能够解析来自同一远程网站的JSON数据。我用来解析xml数据的代码是: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Aviation</title>
<script type="text/javascript" src="Scripts/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
var result;
function xmlparser() {
$.ajax({
type: "GET",
url: "http://services.faa.gov/airport/status/IAD?format=xml",
dataType: "xml",
success: function (xml) {
result = xml.city;
document.myform.result1.value = result;
},
error: function (xml) {
alert(xml.status + ' ' + xml.statusText);
}
});
}
</script>
</head>
<body>
<p id="details"></p>
<form name="myform">
<input type="button" name="clickme" value="Click here to show the city name" onclick=xmlparser() />
<input type="text" name="result1" readonly="true"/>
</form>
</body>
</html>
航空
var结果;
函数xmlparser(){
$.ajax({
键入:“获取”,
url:“http://services.faa.gov/airport/status/IAD?format=xml",
数据类型:“xml”,
成功:函数(xml){
结果=xml.city;
document.myform.result1.value=结果;
},
错误:函数(xml){
警报(xml.status+“”+xml.statusText);
}
});
}
因为我已经打印了错误消息,所以我只在警报框中以“o错误”的形式获取错误。请任何人帮助解析来自远程网站的xml数据。
注意:我还有“城市”而不是“城市”,但它不起作用。。。
提前感谢…我认为这不起作用,因为该服务仍在返回xml。jsonp需要一个n对象文本作为传递给回调的参数。我相信,如果您在本地运行此程序,您将意识到在您的成功中没有可消耗的数据。试试这个
$.ajax({
type: "GET",
url: "http://services.faa.gov/airport/status/IAD?format=json",
dataType: "jsonp",
success: function (data) {
document.myform.result1.value = data.city;
},
error: function (jqXHR, textStatus, errorThrown) {
alert(errorThrown);
}
});
下面是使用asp.net mvc 3创建代理的示例。我刚刚创建了一个操作,它返回一个映射到字符串的ContentResult,但我将内容类型定义为text/xml。这只是向服务发出一个webrequest,并将流读入一个字符串中,以便在响应中发回
[HttpGet]
public ContentResult XmlExample()
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://services.faa.gov/airport/status/IAD?format=xml");
string xml = null;
using (WebResponse response = request.GetResponse())
{
using (var xmlStream = new StreamReader(response.GetResponseStream()))
{
xml = xmlStream.ReadToEnd();
}
}
return Content(xml, "text/xml");
}
您的xmlParser函数如下所示:
<script type="text/javascript">
var result;
function xmlparser() {
$.ajax({
type: "GET",
url: "XmlExample",
dataType: "xml",
success: function (xml) {
result = $(xml).find("City").text();
document.myform.result1.value = result;
},
error: function (xml) {
alert(xml.status + ' ' + xml.statusText);
}
});
}
</script>
var结果;
函数xmlparser(){
$.ajax({
键入:“获取”,
url:“XmlExample”,
数据类型:“xml”,
成功:函数(xml){
结果=$(xml.find(“City”).text();
document.myform.result1.value=结果;
},
错误:函数(xml){
警报(xml.status+“”+xml.statusText);
}
});
}
jQueryAjax通过在内部使用$.parseXML转换数据,这消除了我们甚至在成功块中调用它的要求。此时,您就有了一个jQuery对象,可以使用它的默认DOM函数来查找城市节点
确保将XmlExample替换为它根据控制器映射到的url。解决方案非常简单(在的评论中提到) 1.在服务器上添加一个文件
IAD\u proxy.php
2.将以下代码放入其中
标题(“内容类型:text/xml;charset=utf-8”);
回显文件\u获取\u内容('http://services.faa.gov/airport/status/IAD?format=xml');
3.将Ajax请求中的url
更改为IAD\u proxy.php
如果您正在使用任何其他服务器端语言,请尝试实现相同的想法
编辑:请阅读相关内容,以下是我尝试过的内容,它正在发挥作用
脚本:
$.ajax({
键入:“获取”,
url:“IAD_proxy.php”,
数据类型:“xml”,
成功:函数(xml){
警报($(xml.find('City').text());
},
错误:函数(xml){
警报(xml.status+“”+xml.statusText);
}
});
在这里,我用document.write($(xml.find('City').text()尝试了它代码>
Ajax无法执行跨域请求。如果返回的响应是jsonp,则必须使用服务器端脚本代理JavaScript可以通过Ajax执行跨域请求的信息。当涉及到xml和json时,您不能从JavaScript执行跨域请求,@Pekka评论说,您将需要一个服务器端代理来发送请求。@Pekka:请您解释一下如何使用此示例执行此操作???但是为什么我能够使用JSON数据在ajax中执行跨域请求呢???谢谢…是的,甚至jsonp也是一个灾难性的跨浏览器(我在IE6-7中确实找不到任何方法)IE8本身也是一个痛苦的灾难(使用XDomainRequest)。无论如何然后可以使用JSONP使用服务器端代理。jquery为此提供了支持。但我不认为这是一个跨doamin的问题。Prabu,你能在网络视图中查看响应是什么吗?不确定我为什么会收到否决票,因为如果你实际运行上面的ajax代码,你会看到数据参数是服务返回的json。引自问题“但我能够解析来自同一远程网站的json数据”。OP已经能够做到这一点了,问题是关于XML的。@Adnan我想我们在这里有些分歧。您是对的,他问您是否可以通过JavaScript从跨域请求解析xml。我只是让他知道,除非你使用jsonp并给他一个jsonp解决方案,否则你无法完成这个跨域的任务。他可以从他的域中创建一个代理,然后通过调用他的代理端点来使用JavaScript,代理端点反过来调用services.faa.gov服务。@DeathBedMotorcade,OP已经知道(我在前面的评论中引用了同一句话),您没有添加任何内容。说XML不起作用,只需一个注释即可。看,你自己知道你没有提供答案(你编辑了你的评论来添加代理的东西),现在如果你的答案中有这个(可能有一些PHP代理的例子),我很乐意投票。@prabu R我可以给你一个使用asp.net mvc的代理示例,如果你在服务器端代码中使用的是asp.net mvc的话。我已经尝试过了……但是它显示的警报框是“200 OK”……仍然是“error”里面的,只有正确的吗?@unludo,引用OP的评论“这有解决方案吗?”。我非常高兴看到你发布一个客户端解决方案,在这种情况下,我会学到一些新东西。非常感谢。