【问题标题】:Problem with jQuery JSONP twitter search requestjQuery JSONP twitter 搜索请求的问题
【发布时间】:2011-07-12 21:43:49
【问题描述】:

我在使用 jsonp search.json 正确检索 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]);
    }
}

但是当我尝试使用 setInterval 每 xx 秒刷新一次数据时:

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

不幸的是,它不起作用。我遇到了这个错误:

NOT_FOUND_ERR:DOM 异常 8:一个 试图引用一个节点 在它不存在的上下文中。

基本上,每次我尝试在另一个函数中调用我的 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({结果...

而且 jsonp 字符串没有被解释..

这有什么线索,有什么提示吗?

非常感谢!

【问题讨论】:

  • 我刚刚在 Chrome 中测试没有问题。我所做的唯一更改是将tw_callback 的内容替换为console.log(jsonp)。您使用的是什么浏览器,您在多个浏览器中是否有相同的问题?这应该没有影响,但您可以将 setInterval 缩短为 setInterval(getTweets, 1000*interval_tourniquet);
  • 不幸的是,它在 Chrome 或 Safari 上对我不起作用.. :(

标签: php javascript jquery api jsonp


【解决方案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]);
            }
        }
    });
}

【讨论】:

  • 只是出于好奇,&amp;callback=? 是做什么的?
  • 它是一个占位符,供 jQuery 提供一个函数名,它将接收响应。例如,jQuery 将生成一个函数 callback123,参数看起来像 &callback=callback123,JSONP 响应看起来像 callback123({ your: response, data: ...})。此外,由于请求类型设置为 JSONP,因此不会使用 XMLHttpRequest 请求,而是使用与您的 URL 匹配的 src 的简单脚本标记。
猜你喜欢
  • 1970-01-01
  • 2013-04-25
  • 2011-03-08
  • 2012-10-07
  • 1970-01-01
  • 1970-01-01
  • 2017-04-22
  • 2013-09-15
  • 2012-04-24
相关资源
最近更新 更多