2010-02-17 6 views
0

Je suis en train d'écrire mon premier morceau d'AJAX, en lisant la ligne publique de Twitter.

Je les bits de code suivants:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Javascript Twitter client</title> 
<script src="library/jquery-1.4.1.js" type="text/javascript"></script> 
<script src="twitter.js" type="text/javascript"></script> 
</head> 
<body> 
<div id="twitter"><p>Blank text</p> 
</div> 
</body> 
</html> 

et

/* twitter.js */ 
TwitterURL = 'http://twitter.com/statuses/public_timeline.xml'; 

$(document).ready(function() { 
    $.get(TwitterURL, function(data, textStatus) { 
     $('#twitter').empty().text(textStatus); 
     } 
    ); 
    } 
) 

Lorsque je tente en fait de l'exécuter, je reçois un textStatus de "succès", mais je ne parais pas pour obtenir des données. Dans Firebug, j'obtiens "Erreur d'analyse XML: aucun élément trouvé" Emplacement: moz-nullprincipal: {82e4c9e5-0335-4fd8-b295-bfb8e10a6b18} Numéro de ligne 1, Colonne 1: "dans la fenêtre de décodage XML.

Si j'utilise curl pour télécharger l'URL, j'obtiens le XML que j'attends.

Qu'est-ce que je fais mal ici?

Edité à ajouter:

Il semble que je reçois effectivement des données de Twitter, la requête HTTP semble prendre environ 5.5s et Firebug affiche les éléments suivants dans la console. Si c'était la même origine qui causait des problèmes, je m'attendrais à un affichage totalement différent.

têtes de requête:

Host: twitter.com 
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.7) Gecko/20100106 Ubuntu/9.04 (jaunty) Shiretoko/3.5.7 
Accept: */* 
Accept-Language: en-us,en;q=0.5 
Accept-Encoding: gzip,deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive: 300 
Connection: keep-alive 
Origin: null 

Http têtes de réponse:

Date: Wed, 17 Feb 2010 22:49:32 GMT 
Server: hi 
X-RateLimit-Limit: 150 
X-Transaction: 1266446972-35253-14922 
Status: 200 OK 
Etag: "4f77a9ba7d3794163fbe9561e4e829f4"-gzip 
Last-Modified: Wed, 17 Feb 2010 22:49:32 GMT 
X-RateLimit-Remaining: 149 
X-Runtime: 0.23618 
Content-Type: application/xml; charset=utf-8 
Pragma: no-cache 
X-RateLimit-Class: api 
Cache-Control: no-cache, no-store, must-revalidate, pre-check=0, post-check=0 
Expires: Tue, 31 Mar 1981 05:00:00 GMT 
X-Revision: DEV 
X-RateLimit-Reset: 1266450572 
Set-Cookie: _twitter_sess=BAh7CDoRdHJhbnNfcHJvbXB0MDoHaWQiJWNlODVlYTQwNWQ0NWIxM2UzODNm%250AN2FhYzBhY2JkZGNlIgpmbGFzaElDOidBY3Rpb25Db250cm9sbGVyOjpGbGFz%250AaDo6Rmxhc2hIYXNoewAGOgpAdXNlZHsA--e866ff422f342146a298acbce26872cf6c04b7e8; domain=.twitter.com; path=/ 
Vary: Accept-Encoding 
Content-Encoding: gzip 
Connection: close 
Transfer-Encoding: chunked 

Répondre

2

en utilisant le code ci-dessous devrait résoudre le problème.

/* Twitter.js - Code gets and displays the latest tweet from Twitter */ 
twitterURL = 'http://twitter.com/statuses/public_timeline.json'; 
$(document).ready(function() { 
    $.get(twitterURL, function(json) {  
    $('#twitter').empty().text(json[0].text); // Subscript k of json object between 0 and 19 (inclusive) 
    }, 'jsonp'); 
}); 

Mais je ne suis toujours pas sûr de savoir pourquoi la demande GET au XML ne fonctionne pas.

2

Same origin policy, je suppose.

Hmm. Si vous récupérez réellement des données, mais Firefox ne les analyse pas correctement ... avez-vous essayé de le faire en JSON plutôt qu'en XML (en demandant http://twitter.com/statuses/public_timeline.json)? Ou spécifier pour jQuery que vous attendez XML de retour (en passant un troisième argument de "xml"-jQuery.get()?

+0

Il semble que les données proviennent de Twitter, donc je ne suis pas sûr que ce soit le problème. –