【问题标题】:jquery and random.org "is not allowed by Access-Control-Allow-Origin"jquery 和 random.org “Access-Control-Allow-Origin 不允许”
【发布时间】:2011-10-25 06:18:02
【问题描述】:

我在使用 jQuery 从 random.org 请求随机数时遇到问题。当我使用静态页面和以下 javascript 时,获取随机数没有任何问题。但是,我在 Heroku 上托管了一个 Sinatra 应用程序(另外,当使用 Thin 在生产环境中本地运行我的应用程序时)我得到“访问控制允许来源不允许(网站)”。

function raffler(){

var rowCount = $('#winnerTable tr').length;

$('#winnerButton').click(function() {
    $.get("http://www.random.org/integers/?", {num: "1", min: "1", max: rowCount, col: "1", base: "10", format: "plain", rnd: "new"}, function(randNum) {
        var myNumber = randNum;
        $("#entry-" + randNum).addClass('winner');
    });
});

};

想法?

【问题讨论】:

  • Ajax 请求受同源策略的限制。除非您的页面托管在域 www.random.org 上,否则您应该无法发出 Ajax 请求...

标签: jquery sinatra


【解决方案1】:

好吧,快速检查一下,random.org 不会返回 任何 CORS 标头。这解释了为什么不允许您从您的网站通过 Javascript 请求它。

您是否已在本地(即通过file:/// 协议)加载了静态文件,它在哪里工作?还有其他安全措施,浏览器通常允许跨域 AJAX。

【讨论】:

    【解决方案2】:

    老实说,我不明白你是怎么做到的。因为你不应该这样做。 Access-Control-Allow-Origin 是一种 XSS 保护,可阻止跨域请求,并且是大多数客户端脚本引擎(例如 Flash)的一部分。使用以下来生成随机数:

    Math.random()
    

    【讨论】:

    • 我也不确定;我不知道为什么它在起作用时起作用,以及为什么不起作用。我想尽可能地使用随机数生成(random.org),但我只需要满足于 Math.random()。 =] 感谢您的帮助。
    • 但是,如果您在桌面上设置了一个 .html 文件,并使用我在上面发布的代码链接到一个 .js 文件,它就会起作用。 ;)
    【解决方案3】:

    使用 jQuery YQL 插件从该页面获取结果。

    它通过使用 Yahoo 服务绕过来源检查来获取所需页面的内容。

    http://plugins.jquery.com/project/jquery-yql-plugin

    但这是非常复杂的方式。为什么不使用 Math.random() ?

    【讨论】:

      猜你喜欢
      • 2013-08-24
      • 2015-06-17
      • 2013-09-09
      • 2012-03-08
      • 2012-06-07
      • 2011-11-05
      相关资源
      最近更新 更多