【发布时间】:2014-02-22 03:46:43
【问题描述】:
我正在尝试使用 ember-data 获取一个简单的注册表单以保存在我的服务器上。该调用在技术上有效,但成功回调永远不会在 promise 上触发,我不知道为什么。
服务器从前端接收到数据并成功保存到数据库中。然后它返回状态码 201 表示已创建。我可以在 Chrome 调试器中看到成功的响应。但是即使服务器以成功状态响应,错误回调也会在保存的承诺上触发。我已经通过放置调试器确认每次都会发生这种情况;错误回调中的语句。
我的路由器型号是这样连接的:
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 响应有关。两个问题:
- 我没有在回复中包含 ID
- 我没有将响应“包装”在“registerUser”中。这是匹配模型名称所必需的。
以下是有效回复:
{
"registerUser": {
"id": 11,
"email": "mike999@test.com",
"password": "12345",
"password2": "12345",
"name": "Mike"
}
}
【问题讨论】:
标签: ember.js ember-data