我想从远程网站http://services.faa.gov/airport/status/IAD?format=xml解析xml数据......但是我无法解析xml数据而我只是收到错误。但我能够从同一个远程网站http://services.faa.gov/airport/status/IAD?format=json解析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">
<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>
由于我打印了错误消息,因此警报框中的错误仅为“错误”。请帮忙解析远程网站的xml数据。 注意:我也有'城市'而不是'城市',但它不起作用...... 提前谢谢......
答案 0 :(得分:3)
我不相信这会起作用,因为服务仍在返回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>
jQuery ajax在内部使用$ .parseXML转换数据,这消除了我们甚至在成功块中调用它的要求。此时,您有一个jQuery对象,您可以使用它的默认DOM函数来查找City Node。
请务必根据您的控制器将 XmlExample 替换为其映射到的网址。
答案 1 :(得分:3)
解决方案非常简单(在Pekka评论中提及)
1.在您的服务器上添加文件IAD_proxy.php
2.在其中输入以下代码
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());