2009-10-27 68 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