我正在尝试使用ember-data来获取一个简单的注册表单以保存在我的服务器上。这个电话在技术上有效,但成功回调永远不会触发承诺,我不知道为什么。
服务器从前端接收数据并成功将其保存到数据库。然后它返回CREATED的状态代码201。我可以看到Chrome调试器中发生的成功响应。但即使服务器响应成功状态,也会在save的承诺上触发错误回调。我已经通过调试器确认每次都会发生这种情况;错误回调中的语句。
我的路由器的模型如下所示:
model: function() {
return this.store.createRecord('registerUser');
}
我的控制器中有一个简单的寄存器功能:
register: function() {
var self = this;
this.get('model').save().then(function() {
self.transitionToRoute('index');
}, function(resp) {
if (resp.responseJSON) {
self.get('model').set('errors', resp.responseJSON.errors);
}
});
}
每次我的服务器返回响应,成功或失败时,都会遇到故障回调。如果我在响应中有错误(对于无效数据或其他内容),则错误会在表单中成功显示。我可以看到请求正确进入,数据存储在数据库中。因此,保存在技术上是成功的,但是即使从服务器返回成功的201状态(可以在Chrome调试器中验证),ember似乎也不知道它。
我唯一能想到的是ember-data的适配器正在做一些我不知道的事情,但我只是使用默认的RESTAdapter而没有触及它。还有什么吗
如果它有所不同,服务器正在运行Play 1.2.5。我不知道这是否会对响应的标题或类似内容产生影响。
非常感谢任何帮助。谢谢你的时间!
麦克
解
因此,问题与JSON响应有关。这两个问题:
以下是有效回复:
{
"registerUser": {
"id": 11,
"email": "mike999@test.com",
"password": "12345",
"password2": "12345",
"name": "Mike"
}
}
答案 0 :(得分:7)
Ember Data期待响应中的模型,因此发回成功的http状态并不意味着它会击中成功终点。当它试图序列化您的响应(或没有响应)时,它可能会失败,这就是它击中失败函数的原因。回复的一个重要原因是记录的id
。
返回的模型应采用以下格式
{
registerUser:{
id: "123",
attr: "asdf"
}
}