2009-08-17 6 views
0

Je travaille sur un module Drupal 6 où j'utilise jquery (et plus spécifiquement, la méthode $ .ajax) pour récupérer un flux RSS de l'API météo de Yahoo. J'ai décidé de ne pas utiliser la bibliothèque JFeed car j'ai besoin d'accéder aux éléments avec le préfixe "yweather" (et je n'ai pas trouvé de moyen d'y accéder via JFeed). J'ai décidé d'utiliser la méthode $ .ajax et d'analyser la réponse XML à la place. Le code JavaScript ci-dessous fonctionne bien dans Firefox et IE, mais ne fonctionne pas dans Safari (ou Chrome FWIW):Javascript fonctionne dans FF/IE mais pas 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); 
     }); 
} 

Quand je vérifie la console d'erreur dans Safari je le message d'erreur suivant: TypeError: Result of expression 'atmosphere[0]' [undefined] is not an object. Y at-il un problème avec utilisant getElementsByTagName dans Safari? Dois-je accéder différemment à l'objet retourné par getElementsByTagName?

Répondre

0

Avez-vous essayé l'atmosphère [1] au lieu de 0 pour Chrome et Safari?

+0

Oui Je viens essayé et a obtenu le même message d'erreur dans Safari comme je l'étais avant (TypeError: Résultat d'express 'atmosphere [1]' [indéfini] n'est pas un objet – toddk

1

Peut-être que le simple traitement du XML en tant que données et l'utilisation de sélecteurs jQuery pour extraire ce que vous voulez fonctionneraient.

$(xml).find("yweather:atmosphere").attr("humidity") - vous pourriez avoir besoin d'utiliser un filtre au lieu de trouver - qu'en pensez-vous?

+0

Ce code a eu l'erreur de disparaître dans Safari mais ne m'a pas donné une valeur valide ck encore (encore "indéfini"). J'ai testé ça dans Firefox et tout semble fonctionner là ... – toddk

1

J'ai eu exactement le même problème, mais suis tombé sur la réponse ici: http://reference.sitepoint.com/javascript/Document/getElementsByTagName

Il a à voir avec l'espace de noms yweather. Utilisez la fonction getElementByTagNameNS à la place.

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

devient

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

référence de fonction

: http://reference.sitepoint.com/javascript/Document/getElementsByTagNameNS

Questions connexes