J'ai écrit un script qui interroge Twitter via les méthodes AJAX de Prototype, saisit les résultats JSON, les évalue, puis met à jour un div avec les tweets formatés. Tout a bien fonctionné lors des tests (Safari 4.0.3 sur une machine OS 10.6.1) jusqu'à ce que je charge le script sur un serveur et qu'il échoue. Le script avait tous les éléments côté client et faisait référence au même fichier Prototype.js, donc je ne peux pas comprendre pourquoi il fonctionnait localement mais pas à distance. J'ai dépouillé le script de son essence même - en renvoyant simplement le dernier tweet de ma ligne de temps dans une boîte d'alerte - et fonctionne/se casse comme décrit ci-dessus, ainsi que dans Firefox. Je suis sûr que je fais une erreur osseuse, mais je ne trouve pas l'erreur de mes manières.Simple AJAX JS fonctionne correctement localement dans Safari, échoue sur le serveur et dans Firefox (problème avec evalJSON())?
Voici l'intégralité de ma page. Fonctionne localement, pas sur le serveur ou dans Firefox:
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Test</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.2/prototype.js"></script>
<script type="text/javascript" charset="utf-8">
document.observe("dom:loaded", function(){
var tweetAddress = "http://twitter.com/status/user_timeline/hellbox.json?count=1";
new Ajax.Request(tweetAddress, {
method: 'get',
onSuccess: function (transport) {
var tweets = transport.responseText.evalJSON();
alert(tweets[0].text);
}
});
});
</script>
</head>
<body>
</body>
</html>
Merci Pascal - Par localement, je voulais dire ouvrir le fichier directement à travers le chemin local, et cela a fonctionné. Cependant, le chargement via un serveur Web localhost a empêché l'exécution du fichier. –
ok, merci pour l'explication. Chargement via un navigateur Web local, vous rencontrez la contrainte SOP dont je parlais, qui est le "comportement attendu" - vous devrez soit utiliser un proxy, ou construire dynamiquement une balise de script pour faire cela "Ajax" demande pour vous - vous pouvez probablement rechercher "JSONP" à ce sujet. –