首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从HTTP加载Sammy.js (Sinatra和MongoHQ)

从HTTP加载Sammy.js (Sinatra和MongoHQ)
EN

Stack Overflow用户
提问于 2012-12-07 03:20:22
回答 3查看 382关注 0票数 0

我正在从客户端Sinatra测试用于连接到MongoHQ和检索文档的Sammy.js。但是,我在使用Sammy.js检索它时遇到了问题。我的代码看起来像这样:

代码语言:javascript
复制
this.get('#/', function(context) {

  this.load('http://localhost:4567/test.json', { cache: false })
      .then(function(items) {
        context.items = items;
      })
      .partial('templates/index.ms');

});

XMLHttpRequest无法加载。Access-Control-Allow-Origin不允许原始地址http:// localhost。

你有什么建议来解决这个问题吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-06 16:33:31

我不知道为什么我会问这个问题,为什么仍然没有得到回答。

代码语言:javascript
复制
this.get('#/', function(context) {

  context.load('http://...', { dataType: 'jsonp' })
      .then(function(items) {
        context.items = items;
      })
      .partial('templates/index.ms');

});

只需将数据类型添加到json填充即可。

票数 0
EN

Stack Overflow用户

发布于 2012-12-07 04:26:17

由于跨域资源共享,您的XMLHTTPRequest被阻止。

要了解更多信息,请查看wikipedia article on CORS

要了解如何在服务器端实现它,请查看enable-cors.org

不幸的是,他们在enable-cors.org上没有Ruby版本(我现在正在做一个拉取请求),同时你可以在任何基于机架的服务器上使用类似这样的东西:

代码语言:javascript
复制
class CORSController < ActionController::Base

  before_filter :cors_preflight_check
  after_filter :cors_set_access_control_headers

  def cors_set_access_control_headers
    headers['Access-Control-Allow-Origin'] = '*'
    headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS'
    headers['Access-Control-Max-Age'] = "1728000"
  end

  def cors_preflight_check
    if request.method == "OPTIONS"
      headers['Access-Control-Allow-Origin'] = '*'
      headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS'
      headers['Access-Control-Allow-Headers'] = 'X-Requested-With'
      headers['Access-Control-Max-Age'] = '1728000'
      render :text => '', :content_type => 'text/plain'
    end
  end

end

编辑:

我应该补充的是,任何从CORSController继承的类都将允许CORS请求,如果你想全局使用CORS,你应该将它添加到你的ApplicationController中。

此外,将Access-Control-Allow-Origin设置为通配符也是一个潜在的安全风险。

票数 1
EN

Stack Overflow用户

发布于 2012-12-07 14:03:46

我已经解决了在Apache服务器中设置Passenger Module以从http:// localhost/json/test.json运行的问题。因此,在这种情况下,保持相同的域"localhost“,并且不需要具有类型为Cross Origin的约束...谢谢!:D

我学到的:避免使用WEBrick

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13750942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档