2010-09-16 7 views
1

J'essaie de créer une connexion ajax à un flux xml météo, puis analyser les données renvoyées. Je n'ai aucun problème à établir une connexion via IE, mais pour une raison quelconque, je n'ai pas de chance dans FF ou Safari. Fondamentalement ce que je fais exécute un fichier html qui contient le code suivant.Exécution Ajax dans IE, FF et Safari

<html> 
<script type="text/javascript" language="javascript"> 

    function makeRequest(zip) { 
    var url = 'http://rdona.accu-weather.com/widget/rdona/weather-data.asp?location=' + zip; 
     //var httpRequest; 
    var httpRequest = false; 

     if (window.XMLHttpRequest) { 
    document.write("xmlhttprequest"); 
     httpRequest = new XMLHttpRequest(); 
      if (httpRequest.overrideMimeType) { 
       httpRequest.overrideMimeType('text/xml'); 
       // See note below about this line 
      } 
     } 
     else if (window.ActiveXObject) { // IE 
      try { 
       httpRequest = new ActiveXObject("Msxml2.XMLHTTP"); 
      } 
      catch (e) { 
       try { 
        httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); 
       } 
       catch (e) {} 
      } 
     } 

     if (!httpRequest) { 
      alert('Giving up :(Cannot create an XMLHTTP instance'); 
      return false; 
     } 
     httpRequest.onreadystatechange = function() { alertContents(httpRequest); }; 
     httpRequest.open('GET', url, true); 
     httpRequest.send(''); 

    } 

    function alertContents(httpRequest) { 

     if (httpRequest.readyState == 4) { 
      if (httpRequest.status == 200) { 
       alert(httpRequest.responseText); 
      } else { 
       alert('There was a problem with the request.'); 
      } 
     } 

    } 

makeRequest(84405); 
</script> 
</html> 

Toute aide ou suggestion serait grandement appréciée.

+0

Est-ce que cela fonctionne si vous supprimez la ligne "document.write (" xmlhttprequest ");" – Annie

+0

Je viens de mettre ça à des fins de test afin que je puisse voir où je vais. – cameron213

Répondre

0

Pour les choses inter-navigateurs, je vous recommande d'utiliser une bibliothèque comme JQuery, car il va tranquillement lisser sur IE vs Firefox vs Safari etc problèmes. Pour également faire le format de code correctement, utilisez le bouton 101010 dans la barre d'outils.

1

Je vous suggère fortement d'utiliser un cadre pour faire ce genre de chose. Frameworks effectuera toutes les tâches de compatibilité de navigation pour vous. D'autre part, si vous êtes intéressé par la façon de faire cela comme un exercice académique ... encore obtenir un cadre! Voyez comment le cadre le fait et vous apprendrez immédiatement tous les pièges.

Mootools is my framework of choice.

Pour effectuer une requête AJAX de base dans Mootools vous procédez comme suit:

window.addEvent('domReady', function() { 
    new Request({ 
     'url': "The url where you want to send the request 
     'data': "Some data to send. It can be an object." 
    }).send(); 
}); 

Documentation complète pour la classe de demande peut être trouvée here.

Si vous voulez voir comment Mootools implémente le navigateur AJAX, vous pouvez trouver la source de la classe de requête here.

Vous trouverez la source de Browser.Request particulièrement utile.

+0

Ceci est pour un projet iphone pas sûr si cela fonctionnera pour mes fins. – cameron213

+0

Je ne suis pas familier avec le développement de l'iPhone. Toutefois, si les applications iPhone comprennent JavaScript, alors Mootools a une version serveur qui devrait fonctionner à l'intérieur d'une application iPhone. Il suffit de le mettre en haut de votre code. –

+0

@cameron - Ça devrait marcher. Le support standard de Mobile Safari est excellent, et je ne m'attends pas à ce qu'il diffère trop de la version de bureau en termes de support ajax. –

1

Je crains que vous rencontriez des problèmes à cause de same origin policy, ce qui signifie que vous ne pouvez pas faire de XMLHTTPRequests vers un autre domaine.

Pas même jQuery (que vous devriez vraiment vérifier de toute façon) peut vous aider avec cela.

Questions connexes