【问题标题】:National Weather Service javascript jquery ajax 0 error国家气象局 javascript jquery ajax 0 错误
【发布时间】:2015-03-05 02:39:22
【问题描述】:

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

【问题讨论】:

    标签: javascript jquery ajax xml


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      如果可以使用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。

      尽情探索代码吧。

      【讨论】:

        猜你喜欢
        • 2021-10-29
        • 2010-12-31
        • 2015-10-15
        • 1970-01-01
        • 2012-10-04
        • 2016-07-21
        • 1970-01-01
        • 1970-01-01
        • 2013-10-24
        相关资源
        最近更新 更多