2009-08-17 6 views
0

jquery(とくに$ .ajaxメソッド)を使用してDrupal 6モジュールを開発しています.YahooのWeather APIからRSSフィードを取得します。私は "yweather"接頭辞を持つ要素にアクセスする必要があり(JFeed経由でアクセスする方法が見つからないため)、JFeedライブラリを使用しないことに決めました。私は$ .ajaxメソッドを使用し、代わりにXMLレスポンスを解析することに決めました。私はSafariでエラーコンソールをチェックすると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); 
     }); 
} 

私は次のエラーメッセージを参照してください:TypeError: Result of expression 'atmosphere[0]' [undefined] is not an object.が問題にしてあるのJavaScriptコードは以下のFirefoxとIEで正常に動作しますが、サファリ(やChrome FWIW)では動作しません。 SafariでgetElementsByTagNameを使用していますか?別の方法でgetElementsByTagNameによって返されるオブジェクトにアクセスする必要がありますか?

答えて

0

ChromeとSafariで0の代わりに大気[1]を試しましたか?

+0

はい、私はちょうどそれを試してSafariで同じエラーメッセージを得 – toddk

1

XMLをデータとして扱い、jQueryセレクタを使用して必要なものを取り除くだけでうまくいくかもしれません。

$(xml).find("yweather:atmosphere").attr("humidity") - あなたはfindの代わりにfilterを使う必要があるかもしれません - あなたはどう思いますか?

+0

このコードはSafariでエラーが表示されなくなりましたが、有効な値は与えませんでした。 ckはまだ(まだ "未定義")。私はFirefoxでこれをテストし、すべてがそこで動作しているようだ... – toddk

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");

機能の基準となる:エクスプレスの結果:私は(例外TypeError前と http://reference.sitepoint.com/javascript/Document/getElementsByTagNameNS