2009-10-27 76 views
1

我在jQuery ajax (jsonp) ignores a timeout and doesn’t fire the error event中發現了關於JQuery jsonp問題。如何使用JQuery獲取Twitter狀態

我試圖讓我的最後一次更新Twitter:

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>"); 
} 

錯誤警報電話與執行:

ERREUR:錯誤
ERREUR:未定義

然而,我可以看到Firebug中的JSON對象。

任何想法發生了什麼?

+0

@Sergio:看到更新的答案與工作頁面...(至少對我來說) – beggs 2009-10-27 15:36:45

+0

追加「&回調=?」足以讓我得到它的工作;不需要data,dataType或callbackParameter。 – WhyNotHugo 2010-08-03 15:28:37

回答

2

我不知道這是否是完全相關的,但你可能已經丟失在飼料網址爲JSONP回調,除非它的默認設置:

var jsonTwitterFeed = "http://twitter.com/statuses/user_timeline/softamo.json?count=3&callback=?"; 

而且,你的jQuery AJAX調用可以簡單地使用默認的AJAX而不是JSONP。試試這個,讓我們知道:

$.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>"); 
} 
+0

&callback =?不是必需的。 用下一個代碼代替insde成功,我會接受你的答案。 (var i = 0; i 」+ replaceURLWithHTMLLinks(data [i] .text)+「」)( ) ; } – 2009-10-27 10:19:04

+1

@sergio,代碼已更新,我也爲您的循環提高了速度。它避免了多個DOM查找,直到在發現所有推文並生成HTML之後絕對有必要追加字符串。 – 2009-10-27 10:57:48

2

嘗試改變

$.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>");     

編輯

我確實改變了另一件事卻忘了將它添加到答案。

callbackParameter: "jsoncallback", 

應該

callbackParameter: "callback", 

只是爲了完整性這裏是一個測試頁面我做了工作:

<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> 
+0

不改變任何東西。我認爲成功的代碼根本不會執行。 – 2009-10-27 09:33:37

+0

@Sergio,對不起,我忘記了我爲使其工作所做的更改之一......請參閱編輯答案。 \ Cheers – beggs 2009-10-27 14:02:29

0

我試着用下面的代碼,並獲得成功的功能火正確。

$.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); 
    } 
}); 
+0

我收到你的建議的下一個錯誤:object is undefined script.appendChild(document.createTextNo ...(object [name],args)=== false)break;} else \ n – 2009-10-27 09:50:36

相關問題