【问题标题】:Get XML from server with Ajax GET使用 Ajax GET 从服务器获取 XML
【发布时间】:2016-04-05 03:45:48
【问题描述】:

再次发布这个问题,因为这次代码完全不同。

试图从 Avinor(挪威航空当局)获取 XML 格式的航班信息。查询示例:http://flydata.avinor.no/XmlFeed.asp?TimeFrom=1&TimeTo=7&airport=OSL&direction=D&lastUpdate=2016-04-04T15:03:00Z

我进行了 Ajax GET 查询,以便将 xml 提要解析到我的 html p 中,id=flights,但没有成功。我在 Firebug 控制台中收到此错误:

SyntaxError: 预期的表达式,得到 '

Firebug->Net->Headers 显示如下:

Response headers
Cache-Control   private
Content-Length  28088
Content-Type    text/xml; Charset=iso-8859-1
Date    Mon, 04 Apr 2016 18:32:07 GMT
Server  Microsoft-IIS/7.0
X-Powered-By    ASP.NET

Request headers
Accept  */*
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Connection  keep-alive
Host    flydata.avinor.no
User-Agent  Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0

当我进入 Firebug->Net->XML 时,我可以很好地看到 XML 数据。谁能帮我解决这个问题?

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0-beta1/jquery.min.js"></script>

<button type="button" onclick="loadFlights()">
Get Flights</button>

<p id="flights"></p>

<script>

function loadFlights() {

 var url = "http://flydata.avinor.no/XmlFeed.asp?TimeFrom=1&TimeTo=7&airport=OSL&direction=D&lastUpdate=2016-04-04T15:03:00Z";
  $.ajax({
    url: url,
    type: "GET",
    dataType: "jsonp",
    success: function myFunction(xml) {
  var x, i, xmlDoc, txt;
  xmlDoc = xml.responseXML;
  txt = "";
  x = xmlDoc.getElementsByTagName("flight_id");
  for (i = 0; i< x.length; i++) {
    txt += x[i].childNodes[0].nodeValue + "<br>";
  }
  document.getElementById("flights").innerHTML = txt;
}
  }); 
};

</script>

</body>
</html>

【问题讨论】:

  • 如果你的数据类型是 jsonp 你的 url 应该指向一个 javascript 文件而不是一个 xml 文件。顺便说一句,如果你可以用一行代码绕过它,那么 SOP 将完全没用。

标签: javascript jquery ajax dom jsonp


【解决方案1】:

您要求的是 JSONP——AJAX 会接受它,因为填充的 JSON 是唯一可以通过 AJAX 调用获得跨域的东西。但是你没有得到 JSON;您正在获取 XML。为了让事情变得更有趣,您正在尝试将其解析为 HTML。

来自another SE answer

最后,让我们转向主要问题:JSONP 可以用于获取 XML,还是可以跨域解析 XML? 正如其他人指出的那样,答案是响亮的 NO

所以你不走运。对不起。

【讨论】:

  • 我明白了。由于未在服务器端实现 CORS,AJAX 调用无法正常工作。我不明白的是,我可以在 Firebug 中看到从服务器获取的 xml 数据,右键单击并将其保存为建议的文件名(XmlFeed.asp.xml)。在我看来,这意味着我得到了我向计算机请求的 xml 数据。
  • @user3434120 哦,并不是没有进行调用。但是解析器需要 JSONP,所以当它获取 XML 时,它自然会生气并大发雷霆。对您来说最大的问题是 - 当然 - JSONP 是您可以请求跨域的唯一东西。
  • 感谢您澄清这一点,迈克尔。刚刚尝试了一个 getJSON 调用,在 AnyOrigin 上使用该服务,它起作用了。想知道他们是怎么做到的...... :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 2012-09-01
  • 2014-05-20
相关资源
最近更新 更多