2011-03-14 92 views
5

我正在制作一个html页面,旨在在PC上本地运行,最好没有本地服务器运行(file://)。我也使用jQuery使操纵/ AJAX更容易一些。从本地主机或文件访问JSON服务://

我想从twitter API加载2个结果,但我得到一个错误。代码如下:

$.getJSON("http://api.twitter.com/1/statuses/user_timeline.json?screen_name=someuser&count=9", {}, 
    function (data) { 
     $.each(data.items, doSomething1); 
    }); 
$.getJSON("http://search.twitter.com/search.json?q=somequery&result_type=recent&count=9", {}, 
    function (data) { 
     $.each(data.items, doSomething2); 
    }); 

我也尝试了下面的代码,但它没有改变结果。

$.getJSON("http://api.twitter.com/1/statuses/user_timeline.json", 
    { 
     count:   "9", 
     screen_name: "someuser" 
    }, 
    function(data) { 
     $.each(data.items, updateAWTweets); 
    }); 
$.getJSON("http://search.twitter.com/search.json", 
    { 
     q:    "somequery", 
     result_type: "recent", 
     count:   "9" 
    }, 
    function(data) { 
     $.each(data.items, updateHashTagTweets); 
    }); 

我得到了镀铬以下错误(本地主机服务器上):

XMLHttpRequest cannot load http://search.twitter.com/search.json?q=somequery&result_type=recent&count=9. Origin http://localhost:62153 is not allowed by Access-Control-Allow-Origin. 

或(与文件://链接)

XMLHttpRequest cannot load http://api.twitter.com/1/statuses/user_timeline.json?screen_name=someuser&count=9. Origin null is not allowed by Access-Control-Allow-Origin. 

有谁知道我可以修复这个?

+0

该错误是一个跨站点脚本警告。 – 2011-03-14 14:10:26

+0

可能重复[jQuery.getJSON不适用于twitter](http://stackoverflow.com/questions/5183831/jquery-getjson-not-working-for-twitter) – epascarello 2011-03-14 14:31:08

回答

11

您正遇到same-origin policy限制 - 您的脚本无法访问除加载它之外的任何其他域。

  1. 你可以给JSONP一试 - 这是一个共同的解决方案,跨域获取数据:

    你的代码看起来像这样(注在URL中添加callback=?):

    $.getJSON("http://search.twitter.com/search.json?q=somequery&result_type=recent&count=9&callback=?", 
          {}, 
          function (data) { 
            $.each(data.items, doSomething2); 
        }); 
    
  2. 另一种选择是设置代理 - 您可以使用Apache httpd作为代理/反向代理来解决此限制。

+0

似乎很合理,但现在我得到了一个不同的错误:“ Uncaught TypeError:无法读取未定义的属性“长度” – dtech 2011-03-14 20:07:05

+0

似乎你想要访问你认为是数组的'length'属性,但实际上是'undefined'。确保你的数据确实存在('if(!assumeArray){//处理丢失的数据} else {//通常处理}'当搜索查询没有结果时,Twitter会返回什么?另外,请看一下http://stackoverflow.com/questions/3040069/uncaught-typeerror-cannot-read-property-length-of-undefined-jquery关于如何调试这个(和其他)异常的一些建议。 – 2011-03-14 20:37:56

+1

这里的一个[准系统小提琴](http://jsfiddle.net/nogoodatcoding/reJN6/4/),其获取鸣叫为特定的用户,并且还显示一搜索的结果。这有什么帮助? – 2011-03-14 20:47:08

-2

不要使用此$.getJSON() 其不灵活.. 您可以使用

$.ajax({ 
    url:"test.json", 
    dataTypr:"json", 
    async:false 
}).responseText; 

这可以通过HTML轻松访问编码....