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

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

我在http://0.0.0.0:8000 python -m SimpleHTTPServer)上运行我的PhoneGap网络应用程序,并在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. 

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

 def set_access_control_headers headers['Access-Control-Allow-Origin'] = 'http://0.0.0.0:8000' headers['Access-Control-Request-Method'] = 'POST, GET' end 

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

 match '*all' => 'application#cor', :constraints => {:method => 'OPTIONS'} 

在我的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 

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

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

我遵循这篇文章 (“Rails中的CORS”一节),它对我有用。

我将if request.method == :options更改为if request.method == 'OPTIONS'并将方法PUT,DELETE添加到headers['Access-Control-Allow-Methods'] 。 在Access-Control-Allow-Origin输入’*’我有localhost:8080(我在nginx上运行我的应用程序)。

希望这会有所帮助。

PD:您的应用程序控制器中是否有filter(挂钩)?