2010-03-23 44 views
3

检索数据我有jQuery的非常简单的位取回我的最新的tweetjQuery的不能从本地主机

$.getJSON("http://twitter.com/statuses/user_timeline/username.json?count=1", 
      function(data) { 
       $("#tweet_text").html(data[0].text); 
      }); 

能正常工作在我的桌面上的一个简单的HTML文件。但是,一旦从我的本地主机(Apache)访问文件没有数据正在返回。我想知道Apache的任何部分是否以某种方式阻止了该请求?还是其他想法?

+1

您的浏览器执行的是JS,而不是Apache,所以Apache不应该责怪。你真的需要比“不会工作”更具体。什么标题从Twitter返回?状态码? – 2010-03-23 23:50:14

回答

7

由于Same-origin Policy,JavaScript目前无法直接请求跨域。

你最好打赌可能是为此调查JSONP

您可以从两个jQuery找到关于它的更多信息:

如果URL中包含字符串“回调=?”在URL中,请求被视为JSONP。有关更多详细信息,请参阅$.ajax()中有关jsonp数据类型的讨论。

Twitter

参数:

  • 回调:可选。 仅适用于JSON格式。如果提供,响应将使用带给定名称的回调的JSONP格式。

    • 例子:http://search.twitter.com/search.json?callback=foo&q=twitter

希望这有助于。


修正...

如果status/user_timeline支持JSONP,它不记录这样。

您可能需要考虑设置一个Cross-Domain Proxy以获取所需的数据。

0

这是一个shorthand Ajax功能,这相当于:

$.ajax({ 
    url: url, 
    dataType: 'json', 
    data: data, 
    success: success 
}); 

的Ajax(非JSONP)是不允许越过域。

+0

Ajax非常容许跨域。 – Joel 2010-03-23 23:58:05

+0

你有它倒退! XMLHttpRequest只有在使用访问控制并且不是所有浏览器都支持的情况下才允许使用跨域,并且少数服务器可能启用它。您可以绝对加载并执行其他域所服务的脚本。例如,这就是谷歌分析的工作原理。我写了数百个脚本,它们直接从http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js加载jQuery,并使用http://code.google。 com/apis/ajax/documentation /#GoogleLoad – nicerobot 2010-03-24 00:02:14

+0

实际上,每个浏览器都将允许您使用JS从任何外部域获取数据。 XSS是指试图与脚本或另一个域上的DOM(窗口到窗口,帧到帧等)交互的脚本。简单地调用另一个域的数据不应该调用XSS过滤器。工作示例:http://jsbin.com/okoko/3/edit(其中jsbin.com从stackoverflow.com加载json资源) – Joel 2010-03-24 00:19:47

0

尝试将callback=?附加到URL。像这样

"http://twitter.com/statuses/user_timeline/username.json?count=1&callback=?" 
0

也许它需要较长时间的HTML有点localhost上加载由于某种原因,你有没有包裹在一个DOM脚本准备。因此拨打电话,此时没有#tweet_text被填充