2012-10-08 23 views
0

我阅读了大多数人提出的大多数问题,但正如jQuery 1.8.X异步文档中所建议的那样:false已被弃用。在Ajax中进行同步请求,对于jQuery 1.8

使用案例: 我想获取所有推文(使用twitter搜索API)作为位置的主题,我可以使用地理编码和q参数获取该主题。

但我需要获取所有页面,因为我们知道您可以通过twitter api建议的api获得15 * 100个结果。

CODE:可以在这里找到。 http://pastebin.com/rgVDQFve

问题是tweetsPerPage是不确定的,因为getTweets返回的对象是在1状态,但它应该有4

状态,我使用jQuery 1.8.2我试图改变它,但没有效果。

任何人都可以提出一些建议。

编辑:

function main() { 
for(hindex=0; hindex<HASHTAGS.length; hindex++) { 
    for (cindex=0; cindex<COORDINATES.length;cindex++) { 
     for (pindex=0; pindex<NUMBER_OF_PAGES; pindex++) { 
      getTweets(HASHTAGS[hindex], COORDINATES[cindex][1], COORDINATES[cindex][2], pindex+1, function(tweets) { 
       TWEETS = TWEETS.concat(tweets); /*basically I am getting all the tweets in this, I just need a way by which after executing all the getTweets along with their success functions and the callback I get the control to myself which will help me in using TWEETS*/ 
      }); 
     } 
    } 
} 

}

function getTweets(hashtag, latitude, longitude, pageIndex, callback) { 
    $.ajax({  
      url: 'http://search.twitter.com/search.json', 
      cache: false, 
      dataType: 'jsonp', 
      data: { 
        q: hashtag, 
        geocode: latitude + "," + longitude + "," + RADIUS, 
        page: pageIndex, 
        rpp: RESULTS_PER_PAGE, 
        result_type: RESULT_TYPE 
      }, 
      success: function (data) { 
       var results = data.results; 
       var tweets = []; 
       $(results).each(function(index, tweetJSON) { 
         var tweet = { 
          created_at: 'Dhruven' + " " + pageIndex + " " + (index+1) 
         }; 
         var tweetObj = JSON.stringify(tweet); 
         tweets.push(tweetObj); 
       }); 
       callback(tweets); 
      } 
    }); 
    } 
+0

依我之见,getTweets正在恢复XMLHttpRequest对象,而不是每页的推文。这是打算? – Andre

+0

是的,它是返回XMLHttpRequest对象,但如果你看到里面的状态是1,所以实际上在执行ajax请求之前,它返回,为什么我不确定你有什么想法,我试过甚至回调方法..哪在我的情况下不起作用。 –

+0

我采取了谷歌搜索,和jsonp的实施方式,它不能同步完成。你必须切换到回调,你说你尝试过。你遇到了什么问题? – Andre

回答

1

至于说意见,JSONP请求不支持同步请求。

但随着回调异步请求似乎是工作,看小提琴:

http://jsfiddle.net/andreortigao/hAevy/

代码:

function getTweets(hashtag, latitude, longitude, pageIndex, callback) { 
    $.ajax({  
      url: 'http://search.twitter.com/search.json', 
      type:'GET', 
      dataType: 'jsonp', 
      data: { 
        q: hashtag, 
        geocode: latitude + "," + longitude + "," + '10mi', 
        page: pageIndex, 
        rpp: 10, 
        result_type: 'recent' 
      }, 
      success: function (data, status, xmlHttp) { 
       var results = data.results; 
       var tweets = []; 
       $(results).each(function(index, tweetJSON) { 
         var tweet = { 
          created_at: 'Dhruven' + " " + pageIndex + " " + (index+1) 
         }; 
         var tweetObj = JSON.stringify(tweet); 
         tweets.push(tweetObj); 
       }); 
       callback(data.results); 
      } 
    }); 
} 

电话:

getTweets("#facebook", 42.3580555555556, -71.0602777777778, 2, function(tweets){ 
$("#log").text(JSON.stringify(tweets)); }) 
+0

是的,它正在工作,但在这种方法中,我有一些问题,因为我想使用本地文件系统使用chrome将结果写入文件,然后读取它,因为我没有任何控制权,即使一个hashtag可能会转到另一个hashtag所有的页面都没有完成,所以想着其他的选择。 –

+1

我同意你的观点,我正在尝试使用由BEN ALMAN创建的消息队列,可以在这里找到。 http://benalman.com/projects/jquery-message-queuing-plugin/ –