为什么emberjs在从服务器收到错误消息时会抛出错误?

时间:2014-06-17 13:59:13

标签: ember.js ember-data

我是新手,这可能是我很遗憾的事情。 “422(不可处理的实体)”是我在服务器端设置的,而不是库的一部分,所以如果它需要与422不同,我找不到文档。

浏览器是chrome。服务器端是Hunchentoot。

这是Chrome控制台上显示的错误:

POST http://localhost:8080/users 422 (Unprocessable Entity) jquery.js:8706
send jquery.js:8706
x.extend.ajax jquery.js:8136
(anonymous function) ember-data-1.0.0-beta.8.js:2016
invokeResolver ember-1.5.1.js:9646
Promise ember-1.5.1.js:9632
Adapter.extend.ajax ember-data-1.0.0-beta.8.js:2005
Adapter.extend.createRecord ember-data-1.0.0-beta.8.js:1794
_commit ember-data-1.0.0-beta.8.js:11343
(anonymous function) ember-data-1.0.0-beta.8.js:10516
Ember.EnumerableUtils.forEach ember-1.5.1.js:1932
Ember.Object.extend.flushPendingSave ember-data-1.0.0-beta.8.js:10501
DeferredActionQueues.flush ember-1.5.1.js:6127
Backburner.end ember-1.5.1.js:6215
Backburner.run ember-1.5.1.js:6254
Ember.run ember-1.5.1.js:6664
handleRegisteredAction ember-1.5.1.js:38510
(anonymous function) ember-1.5.1.js:22259
x.event.dispatch jquery.js:5095
v.handle jquery.js:4766

这是返回的json:

{"errors" : { "username" : ["Username exists"]}}

适配器:

App.ApplicationAdapter = DS.RESTAdapter

这是模型,永远不会调用警报:

App.User = DS.Model.extend({
  username: DS.attr('string'),
  password: DS.attr('string'),
  becameInvalid: function( model) {
    alert('Whoops')
  }
})

注册控制器:

App.SignupController = Ember.ObjectController.extend({

  confirm_password: "",

  actions: {
    signup: function() {
      var user = this.get('model')
      var self = this
      user.save().then( function( post) {
        self.transitionToRoute('/tasks', post)
      })    
    }
  }
})

路由器:

App.SignupRoute = Ember.Route.extend({
  model: function() {
    return this.store.createRecord('user')
  }
})

1 个答案:

答案 0 :(得分:0)

我必须在我的代码中将它添加到适配器:

App.ApplicationAdapter = DS.RESTAdapter.extend({
  ajaxError: function(jqXHR) {
    var error = this._super(jqXHR);

    if (jqXHR && jqXHR.status === 422) {
        var jsonErrors = Ember.$.parseJSON(jqXHR.responseText)["errors"];

        return new DS.InvalidError(jsonErrors);
    } else {
        return error;
    }
  }
});

非常令人沮丧