Javascript适用于FF / IE但不适用于Chrome / Safari

时间:2009-08-17 00:46:27

标签: javascript jquery xml safari

我正在使用Drupal 6模块,我使用jquery(更具体地说,$ .ajax方法)从Yahoo的weather API中检索RSS提要。我决定不使用JFeed库,因为我需要访问带有“yweather”前缀的元素(我找不到通过JFeed访问它们的方法)。我决定使用$ .ajax方法并解析XML响应。下面的JavaScript代码在Firefox和IE中运行良好,但在Safari(或Chrome FWIW)中不起作用:

function parseXml(xml) {
  var atmosphere = xml.getElementsByTagName("yweather:atmosphere");

  var humidity = atmosphere[0].getAttribute("humidity");

  $('#weatherFeed').html("Humidity: " + humidity);
  $('#weatherFeed').append(
     "<div style=\"text-align: center;margin-left: auto; margin-right: auto;\">" + 
     city + ", " + state + "</div>");
}

function getData(){
   $.ajax({
      type:   'GET',
      url:    'proxy.php?url=http://weather.yahooapis.com/forecastrss&p=94041',
      dataType: 'xml',
      success:  function(xml) {
      parseXml(xml);
 }
 }); 
}

if(Drupal.jsEnabled) {
$(function() {
      getData();
      setInterval("getData()", 30000);
      });   
}

当我在Safari中检查错误控制台时,我看到以下错误消息:TypeError: Result of expression 'atmosphere[0]' [undefined] is not an object.在Safari中使用getElementsByTagName是否存在问题?我应该以不同方式访问getElementsByTagName返回的对象吗?

3 个答案:

答案 0 :(得分:1)

可能只是将XML视为数据并使用jQuery选择器来提取您想要的工作。

$(xml).find("yweather:atmosphere").attr("humidity") - 您可能需要使用过滤器而不是查找 - 您怎么看?

答案 1 :(得分:1)

我有完全相同的问题,但在这里遇到了答案: http://reference.sitepoint.com/javascript/Document/getElementsByTagName

它与yweather命名空间有关。改为使用getElementByTagNameNS函数。

var atmosphere = xml.getElementsByTagName("yweather:atmosphere");

变为

var atmosphere = xml.getElementsByTagNameNS("http://xml.weather.yahoo.com/ns/rss/1.0","atmosphere");

功能参考: http://reference.sitepoint.com/javascript/Document/getElementsByTagNameNS

答案 2 :(得分:0)

您是否尝试过氛围[1]而不是0和Chrome和Safari?