出于某种原因,国家气象局的xml网站对我不起作用。当我说"不起作用时,我的意思是我已经尝试了XMLHttpRequest和ajax来从http://w1.weather.gov/xml/current_obs/KSFO.xml获取xml数据,以编写显示当前天气状况的脚本。这是我的代码:
(function (){
updateWeather();
})();
function updateWeather(){
var url= "http://w1.weather.gov/xml/current_obs/KSFO.xml";
$.ajax({
url: url,
dataType: 'xml',
error:function(xhr){
document.getElementById("weatherbox").innerHTML="error" +xhr.status+xhr.statusText;},
success:function(result,status,xhr){
document.getElementById('weatherbox').innerHTML="success";
}
});
}
我知道你通常不能跨域请求信息,但是NWS网站说它对公众开放并且我使用ajax调用,因为看起来好像没有其他人有这个问题它不能是跨域错误,但我尝试在ajax调用中使用crossDomain: true
。我试过制作网址" https:...."相反,但没有做任何事情。我也试过在ajax调用中指定type:'GET'
。每次运行脚本时,它都会返回error0error
。有没有人有任何想法? ajax调用的工作实现会更好,我已经在这工作了好几天,这让我发疯,我似乎无法检索这些数据。
为了回应第一条评论,我之前研究过它,但似乎SOAP服务是用于请求数据包,例如" SF从1月到9月的天气"或者某种东西,从这个看起来:
"当前天气状况的XML源 通过此页面可以访问美国和美国领土内约1,800个地点的当前天气状况。提供了两种用于计算机到计算机数据传输的文件格式。提供RSS和XML列表以帮助自动传播此信息。有关RSS和XML格式/提要的更多信息。欢迎提出意见和反馈。通过本产品描述文档提供有关此产品的其他信息。
选择州或地区以查找可用的XML天气观测供稿:
选择上面的州/地区列出观察站的显示列表所有可用站的索引列表都以XML(900kb)提供:XML格式"
和
"关于XML NWS提供使用xml标签格式化的每小时天气观测,以帮助通过用于填充数据库,在网页或其他类似应用程序上显示信息的自动程序解析信息。此格式不得与RSS混淆,RSS阅读器和聚合器无法读取。这些文件提供了比用于解析的字符串中的RSS提要更详细的信息。 RSS和XML源都提供图标图像的URL。此外,还提供了XML标记和建议图标中可能出现的短语列表。要访问这些源,请选择状态,然后选择列中的最后一个XML链接。"
来自此网站:http://w1.weather.gov/xml/current_obs/
我应该能够使用上面发布的链接中的xml来检索当前的观察数据,而不是用于计算或预测预测趋势的包,而且似乎SOAP请求服务实际上不起作用因为我不能只订购一个数据点。
答案 0 :(得分:0)
您可以使用JSONP请求来避免出现CORS错误,但此SOAP服务不会将数据包装在脚本中。只需尝试阅读文档here即可。您很可能必须创建一个客户端。 NWS还提供RESTful API。阅读教程here。
答案 1 :(得分:0)
如果您可以使用php代理,请查看http://www.webresourcesdepot.com/cross-domain-javascript-with-simple-php-proxy/以获取解决方案,并查看pastebin上的相应代码链接
总而言之,该解决方案使用中介到与JS代码位于同一位置的远程站点。您可以通过将url参数设置为目标来调用代理。我们假设您已将代理代码保存到文件名' weatherproxy.php'并且您的网络服务器支持php模块和curl支持,然后您将变量设置为
var url = 'weatherproxy.php?url=http://w1.weather.gov/xml/current_obs/KSFO.xml';
如果您的代理没有其他选项,则成功时它将返回一个格式为:
的json { status: { http_code: 200 }, contents: "your xml contents as a string" }
从那里你必须在'内容'上调用xml解释器。或者,您可以提供给该代理的参数以返回原始xml。参数是'& mode = native'。我不确定jQuery是否可以正确处理返回的XML。
有趣地探索代码。