我有一个“创建帐户”视图,我正在开始工作。 Backbone 1.1.2(打字稿)前端,Rails 4.2 beta 1 Web服务后端。
帐户模型
export class Account extends Backbone.Model {
public urlRoot: string;
public validation:any;
constructor(attributes?: any, options?: any){
this.urlRoot = 'http://domain.fake/accounts';
this.validation = {
email: {
required: true,
pattern: 'email'
},
password: {
required: true,
minLength: 6
}
};
super(attributes, options);
}
}
创建帐户视图
export class CreateAccountView extends Backbone.View {
public template: string;
public events: any;
public model: accountModelImport.Account;
constructor(options?: Backbone.ViewOptions){
this.el = '#modal';
this.template = createAccountViewTemplate;
this.model = new accountModelImport.Account();
this.events = {
'click #create-account-submit' : 'create'
};
super(options);
}
public render(): CreateAccountView {
this.$el.html(_.template(this.template));
Backbone.Validation.bind(this);
this.$el.modal('show');
return this;
}
public create(){
var email:string = $('#create-account-email').val(), password:string = $('#create-account-password').val(), passconf:string = $('#create-account-password-confirmation').val();
this.model.set({email: email, password: password, password_confirmation: passconf});
this.model.save(null, {success: this.success, error: this.error});
}
public success(){
alert('Success');
}
public error(){
alert('error');
}
}
从上方model.save()
输出Rails:
ActionController::RoutingError (No route matches [OPTIONS] "/accounts"):
我已经看到很多关于作为.save()
的第一个参数传递的内容的问题,我每次都尝试了相同的结果:null, false, {}
我尝试使用相同的问题搜索问题但未能找到问题。在我采用覆盖.sync()
方法之前,我想尝试让它在本地工作。
为什么.save()
尝试使用OPTIONS
代替POST
?
答案 0 :(得分:3)
为什么.save()尝试使用OPTIONS而不是POST?
不是。这是CORS"预检请求"工作中。如果OPTIONS请求成功,则POST请求将跟随。
...预检请求作为HTTP OPTIONS请求(所以是 确保您的服务器能够响应此方法)。它还包含 一些额外的标题:
Access-Control-Request-Method - 实际请求的HTTP方法。 即使HTTP方法是a,也始终包含此请求标头 前面定义的简单HTTP方法(GET,POST,HEAD)。
Access-Control-Request-Headers - 以逗号分隔的非简单列表 请求中包含的标头。
预检请求是一种询问实际权限的方法 请求,在提出实际请求之前。服务器应检查 上面的两个标头验证了HTTP方法和 请求的标题有效且已被接受。
答案 1 :(得分:0)
正如@meagar在回答这个问题时指出的那样,这并不是骨干试图做错的事情。这是一个CORS问题。我使用config.action_dispatch.default_headers.merge!
手动设置了标题,但显然这还不够。
多一点谷歌搜索给了我一个回答的小宝石(得到它,'宝石')...... Rails RoutingError (No route matches [OPTIONS]
那里的答案引导我https://github.com/cyu/rack-cors
安装gem并根据其说明进行配置后,POST
请求按预期进行。
希望这对未来的其他人有所帮助,并且一定要归功于@meagar帮助我走上正确的道路。