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(挂钩)?
- Rails 3 UJS驱动程序事件
- Rails:在textfield中执行onchange远程函数时如何从另一个字段获取值
- 使用Ruby on Rails的Ajax简单视图刷新
- Rails *已完成406不可接受“在生产中……在分段中工作
- Rails表单:使用AJAX基于其他collection_select值更新collection_select选项
- Rails – 通过ajax显示索引和显示操作的结果
- 检查3个旧复选框后如何调用3个新复选框?
- 使用带远程的ajax的Ruby表单:true给出了ActionController :: InvalidAuthenticityToken错误。 经典提交没有
- 如何在Rails 3中使用AJAX请求实现重定向响应?