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?

Était-ce utile?

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);
    }
});
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top