从未使用Ember-Data save()触发成功回调

Mic*_*l O 9 ember.js ember-data

我正在尝试使用ember-data来获取一个简单的注册表单以保存在我的服务器上.这个电话在技术上有效,但成功回调永远不会触发承诺,我不知道为什么.

服务器从前端接收数据并成功将其保存到数据库.然后它返回CREATED的状态代码201.我可以看到Chrome调试器中发生的成功响应.但即使服务器响应成功状态,也会在save的承诺上触发错误回调.我已经通过调试器确认每次都会发生这种情况; 错误回调中的语句.

我的路由器的模型连接起来像这样:

model: function() {
  return this.store.createRecord('registerUser');
}
Run Code Online (Sandbox Code Playgroud)

我的控制器中有一个简单的寄存器功能:

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);
     } 
  });
}
Run Code Online (Sandbox Code Playgroud)

每次我的服务器返回响应,成功或失败时,都会遇到故障回调.如果我在响应中有错误(对于无效数据或其他内容),则错误会在表单中成功显示.我可以看到请求正确进入,数据存储在数据库中.因此,保存在技术上是成功的,但是即使从服务器返回成功的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"
  }
}
Run Code Online (Sandbox Code Playgroud)

Kin*_*n2k 7

Ember Data期待响应中的模型,因此发送回成功http状态并不意味着它将会触及成功端点.当它试图序列化您的响应(或没有响应)时,它可能会失败,这就是它击中失败函数的原因.回应的一个重要原因是id记录.

返回的模型应采用以下格式

{
   registerUser:{
     id: "123",
     attr: "asdf"
   }
}
Run Code Online (Sandbox Code Playgroud)

https://github.com/emberjs/data/blob/master/TRANSITION.md