2011-03-10 73 views
0

我在使用jsonp search.json正确检索Twitter数据时遇到了一些困难。jQuery JSONP twitter搜索请求问题

当我获取数据只有一次,它的工作原理完全符合这段代码:

function getTweets(){ 
    $.ajax({ 
     url: 'http://search.twitter.com/search.json', 
     type: 'GET', 
     dataType: 'jsonp', 
     jsonpCallback: 'tw_callback', 
     data: 'q=<?php echo urlencode($twitter_search); ?>+-RT&rpp=100' 
    }); 
} 

function tw_callback(jsonp){ 
    for(key in jsonp['results']) {  
     var tweet = jsonp['results'][key]['text'] ; 
     var from = jsonp['results'][key]['from_user']; 
     var avatar = jsonp['results'][key]['profile_image_url']; 

     tw_container.push([tweet,from,avatar]); 
    } 
} 

但是当我尝试再刷新该数据每隔XX秒,使用的setInterval:

setInterval(function() { getTweets(); }, 1000*interval_tourniquet); 

不幸的是不起作用。我有此错误:

NOT_FOUND_ERR: DOM Exception 8: An attempt was made to reference a Node in a context where it does not exist.

基本上,我这得到了每次我试图打电话给我getTweets()功能的函数内部的时间... :(

其他解决办法,我尝试:

function getTweets(){ 
    $.ajax({ 
     url: 'http://search.twitter.com/search.json', 
     type: 'GET', 
     dataType: 'jsonp', 
     data: 'callback=tw_callback&q=<?php echo urlencode($twitter_search); ?>+-RT&rpp=100' 
    }); 
} 

这样,它与另一台服务器上我自己的JSONP API作品完美,但Twitter返回我我的回调两次:

tw_callback(tw_callback({results...

而且JSONP字符串不解释..

任何线索在此,任何暗示?

非常感谢!

+0

我刚刚在Chrome中测试没有问题。我做的唯一改变是用'console.log(jsonp)'替换'tw_callback'的内容。你使用什么浏览器,并且你在多个浏览器中遇到同样的问题?这应该没有影响,但你可以缩短'setInterval'到'setInterval(getTweets,1000 * interval_tourniquet);' – abraham 2011-03-11 03:29:30

+0

不幸的是,它不适用于我的Chrome或Safari .. :( – guillaumepotier 2011-03-11 08:41:39

回答

1

尝试用以下更简单的方法重写您的功能。

function getTweets(){ 
    $.ajax({ 
     url: 'http://search.twitter.com/search.json?q=<?php echo urlencode($twitter_search); ?>&rpp=100&callback=?', 
     dataType: 'jsonp', 
     success: function(){ 

      for(key in jsonp['results']) {  
       var tweet = jsonp['results'][key]['text'] ; 
       var from = jsonp['results'][key]['from_user']; 
       var avatar = jsonp['results'][key]['profile_image_url']; 

       tw_container.push([tweet,from,avatar]); 
      } 
     } 
    }); 
} 
+0

只是出于好奇,是什么'&callback =?'do? – 2011-06-24 13:46:58

+1

它是jQuery的一个占位符,用于提供一个函数名称,它将接收响应。例如,jQuery将生成一个函数callback123,参数看起来像&callback = callback123,JSONP响应看起来像callback123 {your:response,data:...})。另外,由于请求类型设置为JSONP,因此不会使用XMLHttpRequest请求,而是使用简单的脚本标记,其src与您的URL匹配。 – Olegas 2011-06-25 09:06:02