Ember.js 余烬数据:您的服务器返回了一个密钥为0的散列,但您没有该散列的映射

Ember.js 余烬数据:您的服务器返回了一个密钥为0的散列,但您没有该散列的映射,ember.js,ember-data,Ember.js,Ember Data,我有一个简单的模型,并使用RESTadapter获取数据。JSON请求已执行,但随后我收到以下错误:“您的服务器返回了一个密钥为0的哈希,但您没有该哈希的映射” 你知道原因是什么吗 型号: App.Article = DS.Model.extend({ title: DS.attr('string') }); [ { "id": 1, "title": "Title 1" }, { "id": 2, "title": "Title 2"

我有一个简单的模型,并使用RESTadapter获取数据。JSON请求已执行,但随后我收到以下错误:“您的服务器返回了一个密钥为0的哈希,但您没有该哈希的映射”

你知道原因是什么吗

型号:

App.Article = DS.Model.extend({
    title: DS.attr('string')
});
[
  {
    "id": 1,
    "title": "Title 1"
  },
  {
    "id": 2,
    "title": "Title 2"
  }
]
请求文章的JSON响应。JSON:

App.Article = DS.Model.extend({
    title: DS.attr('string')
});
[
  {
    "id": 1,
    "title": "Title 1"
  },
  {
    "id": 2,
    "title": "Title 2"
  }
]
我认为原因是回复的格式。。。我已经改变了我的回答,加入了“文章”,但仍然存在同样的问题

[
  {
    "article": {
      "id": 1,
      "title": "Title 1"
    }
  },
  {
    "article": {
      "id": 2,
      "title": "Title 2"
    }
  }
]

在哪里可以找到关于如何格式化JSOn请求和响应以便与RESTadapter一起使用的好文档?

您要查找的JSOn应该有一个根元素

{"articles": [ 
  { 
    "id": 1,
    "title": "Title 1"
  },
  {
    "id": 2,
    "title": "Title 2"
   }
  ]
}

您可以在或的

@kiwiupover中找到文档。kiwiupover的正确率为98%,如果有多个记录,则应将其复数为
文章

{"articles": [
     { 
       "id": 1,
       "title": "Title 1"
     },
     {
       "id": 2,
       "title": "Title 2"
     }
]}

如果您没有访问服务器的权限,那么修改适配器非常容易。对于“GET”请求,您需要覆盖适配器中的
find
findAll

App.Store = DS.Store.extend({
  adapter: DS.RESTAdapter.create({
    find: function(store, type, id) {
      var root = this.rootForType(type), adapter = this;

      return this.ajax(this.buildURL(root, id), "GET").
      then(function(json){
        var updatedJSON = {};
        updatedJSON[root] = json;
        adapter.didFindRecord(store, type, {article: json}, id);
      }).then(null, DS.rejectionHandler);
    },

    findAll: function(store, type, since) {
      var root, adapter;

      root = this.rootForType(type);
      adapter = this;

      var resourceName = this.pluralize(root);

      return this.ajax(this.buildURL(root), "GET",{
        data: this.sinceQuery(since)
      }).then(function(json) {
        var updatedJSON = {};
        updatedJSON[resourceName] = json;
        adapter.didFindAll(store, type, updatedJSON);
      }).then(null, DS.rejectionHandler);
    }
  })
});
目前,这些函数都存在于源代码中


这里的区别在于在每个函数中定义了
updatedJSON
。它从服务器获取json并构造一个新对象,其中(希望)包含您需要的正确密钥。

谢谢。包含根元素“article”后仍然不起作用-相同错误。问题是多元化吗?我返回一个需要放在“article”中的文章列表。还有其他建议吗?完全文章需要文章,我的错误我会编辑答案。这确实是正确的结构。知道在哪里可以找到关于预期的Ember JSON结构的文档吗?非常感谢。MarcI添加了几个文档链接。我希望这是有帮助的。Thx的文档!事实上,使用冠词是有效的。我可以在哪里找到用于Ember数据的JSON结构文档(考虑一对多数据结构等)。。。感谢我对98%的答案的修正。干杯如果这个方法看起来已经不再是一个有效的例子了,你愿意展示一下它在ember data 1.0中是如何工作的吗?老实说,当我意识到事情发生了多快的变化并破坏了以前的工作时,我停止了尝试使用ember。