8

我想制作一个使用来自另一个域的 xml 数据的小型网站。(来自 Weather Underground 的天气数据:www.wunderground.com)。我只使用 html 和 javascript,并将其全部写在 Visual Studio Express 2012 for Web 中。

我按如下方式发出并发送 xml 请求:

url = "http://api.wunderground.com/api/3c6e3d838e217361/geolookup/conditions/forecast/q/51.11999893,-114.01999664.xml";

xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", url, false);
xmlhttp.send();
xmlDoc = xmlhttp.responseXML;

问题是我在 Google Chrome(版本 29.0.1547.66)开发者控制台中收到以下错误:

XMLHttpRequest cannot load http://api.wunderground.com/api/3c6e3d838e217361/geolookup/conditions/forecast/q/51.11999893,-114.01999664.xml. Origin http://localhost:49933 is not allowed by Access-Control-Allow-Origin. 

或者在 Internet Explorer(版本 10.0.8)控制台上:

SEC7118: XMLHttpRequest for http://api.wunderground.com/api/3c6e3d838e217361/geolookup/conditions/forecast/q/51.11999893,-114.01999664.xml required Cross Origin Resource Sharing (CORS). 

据我了解,CORS(http://enable-cors.org/)需要客户端和服务器双方的努力才能工作。我想假设 Weather Underground API 知道它在做什么并且已经适当地启用了一些东西,例如将响应标头设置为包含“Access-Control-Allow-Origin:*”,并且我知道当我遇到同样的问题时我使用另一个 API 提供程序(World Weather Online)尝试相同的代码。所以我认为这是我应该能够在我的客户端代码中解决的问题。另一个建议是修复服务器端标头的 SO 答案: CORS with XMLHttpRequest

我试图找到答案,但不明白诸如: http ://dev.opera.com/articles/view/dom-access-control-using-cross-origin-resource-sharing/http :// saltybeagle.com/2009/09/cross-origin-resource-sharing-demo/

4

1 回答 1

4

如果你想在 jquery 中使用Ajax和 JSONP

对于 javascript,请参见此处, http: //developer.chrome.com/extensions/xhr.htmlhttp://www.leggetter.co.uk/2010/03/12/making-cross-domain-javascript-requests-using -xmlhttprequest-或-xdomainrequest.html

使用.json格式数据而不是.xml来使您的应用程序更简单、更快捷,即http://api.wunderground.com/api/3c6e3d838e217361/geolookup/conditions/forecast/q/51.11999893,-114.01999664.json

于 2013-09-11T05:32:11.540 回答