国家气象局 JavaScript jquery ajax 0 错误

National Weather Service javascript jquery ajax 0 error

本文关键字:错误 ajax jquery 气象局 JavaScript 国家      更新时间:2023-09-26

由于某种原因,国家气象局的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 服务是用于请求数据包的,例如"1 月至 9 月旧金山的天气"之类的,从这个外观来看:

"当前天气状况的XML提要此页面提供对美国和美国领土约 1,800 个地点的观测到的当前天气状况的访问。提供了两种专为计算机到计算机数据传输而设计的文件格式。提供 RSS 和 XML 列表是为了帮助自动传播此信息。有关 RSS 和 XML 格式/源的更多信息。欢迎评论和反馈。有关此产品/服务的其他信息,请参阅此产品描述文档。

选择一个州或领地以查找可用的 XML 天气观测源:

选择上面的州/地区以列出 显示观测台站列表 所有可用台站的索引列表以XML(900kb)格式提供:XML格式"

"关于 XMLNWS提供每小时的天气观测,格式为xml标签,以帮助通过用于填充数据库,在网页或其他类似应用程序上显示信息的自动化程序解析信息。这种格式不要与 RSS 混淆,RSS 阅读器和聚合器无法读取。这些文件以易于解析的字符串形式提供比 RSS 源更详细的信息。RSS 和 XML 源都提供图标图像的 URL。此外,还提供了 XML 标记中可能出现的短语列表和建议的图标。若要访问这些源,请选择一个状态,然后选择列中的最后一个 XML 链接。

从这个网站: http://w1.weather.gov/xml/current_obs/

应该能够只使用我上面发布的链接中的 XML 来检索当前的观测数据,而不是像用于计算或预测预测趋势那样的包,而且似乎 SOAP 请求服务实际上不适合我的目的,因为我不能只订购一个数据点。

您可以使用 JSONP 请求来避免出现 CORS 错误,但此 SOAP 服务不会将数据包装在脚本中。只需尝试阅读此处的文档。您很可能必须创建一个客户端。NWS还提供了RESTful API。阅读此处的教程。

如果您可以使用 php 代理,请查看解决方案的 http://www.webresourcesdepot.com/cross-domain-javascript-with-simple-php-proxy/,以及 pastebin 上的相应代码链接

总而言之,该解决方案使用与 JS 代码位于同一位置的远程站点的中介。 您可以通过将 url 参数设置为目标来调用代理。假设您将代理代码保存到文件名"weatherproxy.php",并且您的Web服务器支持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。

享受探索代码的乐趣。