javascript - 从本地主机或文件 ://访问 JSON 服务

标签 javascript json xmlhttprequest twitter

我正在制作一个旨在在 PC 上本地运行的 html 页面,最好不要运行本地服务器 (file://)。我还使用 jQuery 来简化操作/AJAX。

我正在尝试从 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);
    });

我在 chrome 中收到以下错误(在本地主机服务器上):

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.

或(使用 file://链接)

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.

有谁知道我该如何解决这个问题?

最佳答案

您遇到了 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 作为代理/反向代理来绕过此限制。

关于javascript - 从本地主机或文件 ://访问 JSON 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5299674/

相关文章:

json - 访问 DeepL 替代翻译

ruby-on-rails - 为什么 rails 无法识别请求 header 中的 `Accept: application/json`?

javascript - 将 react-datepicker 与 redux-form 结合使用

javascript - php表单提交与JS按钮的问题

javascript:作为参数传递时设置的变量不正确

php - json_encode() 自动将数组转换为对象

javascript - 如何使用 Velocity 制作多级 Liferay 菜单?

json - Go 中的面向对象 - 结构/组合/封装

javascript - 使用 xmlHTTPRequest 在新窗口中打开安全应用程序

mysql - 从 Chrome 扩展插入 MySQL