Rails,Backbone,PhoneGap,CORS(Access-Control-Allow-Origin错误不允许)

bot*_*bot 6 ajax ruby-on-rails cors backbone.js cordova

我正在构建一个使用backbone.js和Rails后端的Phonegap应用程序.在创建新用户时,我收到了与CORS相关的错误:

我正在运行我的PhoneGap网络应用程序http://0.0.0.0:8000($ python -m SimpleHTTPServer),并在webrick上运行我的Rails应用程序http://0.0.0.0:3000($ rails服务器).

尝试在Backbone中创建一个新的"Spot"时会出现问题(chrome js控制台):

> s = new App.Models.Spot()
(creates Spot)
> s.save()
(returns error Object)
OPTIONS http://0.0.0.0:3000/spots.json 404 (Not Found) jquery-1.8.2.js:8416
XMLHttpRequest cannot load http://0.0.0.0:3000/spots.json. Origin http://0.0.0.0:8000 is not allowed by Access-Control-Allow-Origin.
Run Code Online (Sandbox Code Playgroud)

这是我的应用程序控制器:

def set_access_control_headers
  headers['Access-Control-Allow-Origin'] = 'http://0.0.0.0:8000'
  headers['Access-Control-Request-Method'] = 'POST, GET'
end
Run Code Online (Sandbox Code Playgroud)

我已经阅读了很多文章,并且我可以获得的最远的是修改我的routes.rb以包含这个:

match '*all' => 'application#cor', :constraints => {:method => 'OPTIONS'}
Run Code Online (Sandbox Code Playgroud)

在我的application_controller.rb中

def cor
  headers["Access-Control-Allow-Origin"] = "*"
  headers["Access-Control-Allow-Methods"] = %w{GET POST PUT DELETE OPTIONS}.join(",")
  headers["Access-Control-Allow-Headers"] = %w{Origin Accept Content-Type X-Requested-With X-CSRF-Token}.join(",")
  head(:ok) if request.request_method == "OPTIONS"
end
Run Code Online (Sandbox Code Playgroud)

添加路径和'cor'方法将允许我进行保存,但是,删除记录时我将遇到相同的错误.

我得到了CORS的基本概念,我无法访问具有与我的请求来源不同的域的服务器.但是,如何使用Rails,Backbone,Phonegap来确定这一点并不清楚.任何帮助都会很棒,谢谢!

cor*_*tex 2

我已经阅读了这篇文章(“Rails 中的 CORS”部分),它对我有用。

我更改if request.method == :optionsif request.method == 'OPTIONS'并将方法 PUT、DELETE 添加到headers['Access-Control-Allow-Methods']. 在Access-Control-Allow-Origin我的 localhost:8080 中插入“*”(我在 nginx 上运行我的应用程序)。

希望这会有所帮助。

PD:您的应用程序控制器中有过滤器(钩子)吗?