Twitter搜索API与jQuery错误

15

我需要使用Twitter API和jQuery请求一个Twitter搜索。在阅读文档后,我编写了以下代码:

  $.getJSON("http://search.twitter.com/search.json?callback=myFunction&q=stackoverflow");

   function myFunction(r) {
       console.log(r);
    }

在执行页面时,Google Chrome在控制台上显示了此错误:

XMLHttpRequest无法加载 http://search.twitter.com/search.json?callback=myFunction&q=stackoverflow
http://localhost/twitter 不允许被Access-Control-Allow-Origin使用。
search.json加载资源失败。

问题是什么?

2个回答

30
您需要稍微改写它,就像这样:

您需要稍微改写它,就像这样:

$.getJSON("http://search.twitter.com/search.json?callback=?&q=stackoverflow", 
  function (r) {
    console.log(r);
});

为了触发JSONP,它需要明确的callback=?,而这在您的命名函数版本中并没有。如果要使用命名回调,最好使用完整版本的$.ajax()

$.ajax({
  url: "http://search.twitter.com/search.json?q=stackoverflow",
  dataType: "jsonp",
  jsonpCallback: "myFunction"
});

function myFunction(r) { console.log(r); }

1
我希望有人能更好地记录这个,我花了一个小时试图弄清楚为什么我被拒绝访问! - Ayyash
Nick Craver再次拯救了我的一天:记得在dataType中使用jsonp而不是json :) - moey
2
看起来 Twitter 进行了一些更改,导致这个答案不再正确。 - user1786129

3

给您的答案增加一些内容,您可以使用以下代码在每个返回的推文中显示文本。

$.getJSON("http://search.twitter.com/search.json?callback=?&q=stackoverflow",

function(data){

for (i=0; i<data.results.length; i++){

$("#tweets").append("<p><strong>Text: </strong>" + data.results[i].text + "<BR/>" + "<p><strong>Created at: </strong>" + data.results[i].created_at +"</p><br /><br />");

}
});

然后在你的HTML主体中加入以下div。
<div id="tweets"></div>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接