Comment obtenir le statut Twitter avec JQuery
Question
J'ai trouvé des informations sur les problèmes JQuery dans JQuery dans jQuery ajax (jsonp) ignore un délai d’expiration et ne déclenche pas l’événement d’erreur .
J'ai essayé d'obtenir mes dernières mises à jour Twitter avec:
var jsonTwitterFeed = "http://twitter.com/statuses/user_timeline/softamo.json?count=3";
$.jsonp({
url: jsonTwitterFeed,
data: {},
dataType: "jsonp",
callbackParameter: "jsoncallback",
timeout: 5000,
success: function(data){
$.each(data, function(){
$("#sNews ul.tweets").append("<li>" + replaceURLWithHTMLLinks(data.text) + "</li>");
});
},
error: function(XHR, textStatus, errorThrown){
alert("ERREUR: " + textStatus);
alert("ERREUR: " + errorThrown);
}
});
function replaceURLWithHTMLLinks(text) {
var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
return text.replace(exp,"<a href='$1'>$1</a>");
}
Les appels d'alerte d'erreur s'exécutent avec:
ERREUR: erreur
ERREUR: non défini
Cependant, je peux voir l'objet JSON dans Firebug.
Avez-vous une idée de ce qui se passe?
La solution
Je ne sais pas si cela est tout à fait pertinent, mais le rappel de JSONP manquait peut-être dans l'URL de votre flux, à moins qu'il ne soit défini par défaut:
var jsonTwitterFeed = "http://twitter.com/statuses/user_timeline/softamo.json?count=3&callback=?";
De plus, votre appel AJAX jQuery peut simplement utiliser le AJAX par défaut et non le JSONP. Essayez ceci et laissez-nous savoir:
$.ajax({
url: jsonTwitterFeed,
data: {},
dataType: "jsonp",
callbackParameter: "jsoncallback",
timeout: 5000,
success: function(data){
var str = '';
for(var i = 0; i < data.length; i++) {
str += '<li>' + replaceURLWithHTMLLinks(data[i].text) + '</li>';
}
$("#sNews ul.tweets").append(str);
},
error: function(XHR, textStatus, errorThrown){
alert("ERREUR: " + textStatus);
alert("ERREUR: " + errorThrown);
}
});
function replaceURLWithHTMLLinks(text) {
var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
return text.replace(exp,"<a href='$1'>$1</a>");
}
Autres conseils
Essayez de changer
$.each(data, function(){
$("#sNews ul.tweets").append("<li>" + replaceURLWithHTMLLinks(data.text) + "</li>");
à
$.each(data, function(post, val){
$("#sNews ul.tweets").append("<li>" + replaceURLWithHTMLLinks(val.text) + "</li>");
Modifier :
J'ai changé une autre chose, mais j'ai oublié de l'ajouter à la réponse.
callbackParameter: "jsoncallback",
devrait être
callbackParameter: "callback",
Juste pour compléter, voici une page de test que j'ai faite et qui fonctionne:
<html>
<head>
<title>test</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript" src="jquery.jsonp-1.1.0.min.js"></script>
<script type="text/javascript">
$(document).ready( function() {
var jsonTwitterFeed = "http://twitter.com/statuses/user_timeline/dougw.json?count=3";
$.jsonp({
url: jsonTwitterFeed,
data: {},
dataType: "jsonp",
callbackParameter: "callback",
timeout: 5000,
success: function(data){
$.each(data, function(key, val){
$("#sNews ul.tweets").append("<li>" + replaceURLWithHTMLLinks(val.text) + "</li>");
});
},
error: function(XHR, textStatus, errorThrown){
alert("ERREUR: " + textStatus);
alert("ERREUR: " + errorThrown);
}
});
function replaceURLWithHTMLLinks(text) {
var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
return text.replace(exp,"<a href='$1'>$1</a>");
}
});
</script>
</head>
<body>
<div id="sNews">
<ul class="tweets">
</ul>
</div>
</body>
J'ai essayé avec le code suivant et la fonction de succès s'est déclenchée correctement.
$.getJSON(jsonTwitterFeed, {
success: function(data){
$.each(data, function(){
$("#sNews ul.tweets").append("<li>" + replaceURLWithHTMLLinks(data.text) + "</li>");
});
},
error: function(XHR, textStatus, errorThrown){
alert("ERREUR: " + textStatus);
alert("ERREUR: " + errorThrown);
}
});