2009-08-17 93 views
0

我正在使用jQuery(更具體地說,$ .ajax方法)從雅虎天氣API檢索RSS提要的Drupal 6模塊。我決定不使用JFeed庫,因爲我需要訪問帶有「yweather」前綴的元素(並且我找不到通過JFeed訪問它們的方法)。我決定使用$ .ajax方法來解析XML響應。下面的JavaScript代碼工作正常在Firefox和IE,但在Safari瀏覽器(或Chrome FWIW)不工作:Javascript工作在FF/IE但不是Chrome/Safari

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返回的對象嗎?

回答

0

您是否嘗試過使用Chrome和Safari的氛圍[1]而不是0?

+0

是的,我只是去嘗試,並在Safari中得到了相同的錯誤消息,因爲我是之前(類型錯誤:明確的結果'atmosphere [1]'[undefined]不是一個對象 – toddk 2009-08-17 01:08:41

1

也許只是將XML視爲數據並使用jQuery選擇器來提取所需的內容。

$(xml).find("yweather:atmosphere").attr("humidity") - 您可能需要使用過濾器而不是find - 您怎麼看?

+0

此代碼在Safari中消失了,但沒有給我一個有效的值ba CK尚未(仍「未定義」)。我在Firefox中測試了這一切,似乎所有東西都在那裏工作...... – toddk 2009-08-17 10:53:40

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

相關問題