从远程网站解析xml数据
我想解析来自远程网站的xml数据http://services.faa.gov/airport/status/IAD?format=xml ...但我无法解析xml数据,我只是得到错误。但是我能够解析来自同一个远程网站http://services.faa.gov/airport/status/IAD?format=json的JSON数据。我已经使用解析XML数据的代码是:从远程网站解析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">
<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>
因为我已打印错误消息我只是得到的错误作为警告框“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类型的行动,但我定义的内容类型为文本/ XML的例子。这只是简单地向该服务发出web请求,并将该流读入到字符串中,以便在响应中发回。
[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>
jQuery的AJAX的使用内部$ .parseXML这消除了我们即使在成功块调用这个要求的数据转换。此时,您有一个jQuery对象,您可以使用它的默认DOM功能来查找城市节点。
确保使用它根据您的控制器映射到的URL替换XmlExample。
不知道为什么我收到了一个反对票,因为如果你实际运行上面的ajax代码,你会看到数据参数是服务返回的json。 – JustinMichaels 2012-08-02 13:39:49
同样适用于我 - 我upvote你:) – unludo 2012-08-02 13:40:09
引用问题“_But我能够解析来自同一个远程website_的JSON数据”。 OP已经能够做到这一点,问题是关于XML。 – Adi 2012-08-02 13:41:03
解决的办法很简单(在的Pekka评论中提及)
1.On您的服务器2.Put下面的代码添加文件IAD_proxy.php
里面
header("Content-type: text/xml; charset=utf-8");
echo file_get_contents('http://services.faa.gov/airport/status/IAD?format=xml');
3.将您的Ajax请求中的url
更改为IAD_proxy.php
。
如果您使用任何其他服务器端语言,请尝试实现相同的想法。
编辑:请阅读关于Parsing XML With jQuery,这是我已经尝试过,它的工作。
Javscript:
$.ajax({
type: "GET",
url: "IAD_proxy.php",
dataType: "xml",
success: function (xml) {
alert($(xml).find('City').text());
},
error: function (xml) {
alert(xml.status + ' ' + xml.statusText);
}
});
在这里,我尝试过用document.write($(xml).find('City').text());
阿贾克斯不能做跨域请求。您将不得不使用服务器端脚本来代理信息 – 2012-08-02 13:09:51
如果返回的响应是jsonp,则JavaScript可以通过Ajax执行跨域请求。当谈到xml和json时,你不能从JavaScript做跨域请求,并且@Pekka评论说你需要有一个服务器端代理来发送请求。 – JustinMichaels 2012-08-02 13:16:08
@Pekka:请你解释一下如何用这个例子来做?但是,我怎么能够在使用JSON数据的Ajax中跨域请求?谢谢你... – 2012-08-02 13:17:17