国家气象局javascript jquery ajax 0错误

时间:2015-01-07 08:43:54

标签: javascript jquery ajax xml

出于某种原因,国家气象局的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请求服务实际上不起作用因为我不能只订购一个数据点。

2 个答案:

答案 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。

有趣地探索代码。