如何从Backbone应用程序POST到PUT和DELETE到不同子域的Rails应用程序?

Whick是从Backbone应用程序发送,PUT和DELETE到不同子域上的Rails应用程序的最佳方式吗?

我试图从Rails应用程序中使用Backbone获取一些数据并且它可以工作。 我试图使用Backbone to Rails应用程序保存新内容。

我有PUT的真正问题(更新数据库中创建的模型)。 我不知道为什么,但是当我在我的骨干应用程序中执行类似:book.save()

这本书是一个已经存在于数据库中的模型,而不是向Rails APP发送PUT请求,而是发送OPTIONS请愿书,而不是数据。

理想情况下,我想从Backbone应用程序向Rails应用程序发送PUT请求,因此我可以在我的Rails应用程序中执行以下操作:

Book.update_attributes params [:book]

Rails应用程序和Backbone应用程序位于同一顶级域的不同子域上。

对于不发布或获取的方法,客户端将发送OPTIONS请求以确定允许跨域的内容。 你需要两件事。 您需要一种方法来响应正确的响应标头,告诉客户端跨域是正常的。 我在ApplicationController中创建了一个after_filter,因为我的跨域需求是系统范围的。

after_filter :allow_cross_domain def allow_cross_domain headers["Access-Control-Allow-Origin"] = request.env['HTTP_ORIGIN'] headers["Access-Control-Request-Method"] = "*" headers["Access-Control-Allow-Methods"] = "PUT, OPTIONS, GET, DELETE, POST" headers['Access-Control-Allow-Headers'] = '*,x-requested-with,Content-Type' headers["Access-Control-Max-Age"] = 1728000 end 

接下来,您需要在routes.rb中处理选项请求

 match "*options", controller: "application", action: "options", constraints: { method: "OPTIONS" } 

并在处理请求的控制器(ApplicationController为我)

 def options allow_cross_domain render :text => "", :layout => false end