【问题标题】:Ember save() throws JSON.parse error: "unexpected end of data at line 1 column 1 of the JSON data"Ember save() 抛出 JSON.parse 错误:“JSON 数据的第 1 行第 1 列的数据意外结束”
【发布时间】:2015-11-22 03:59:15
【问题描述】:

我创建了一个模型记录并通过路由和控制器保存。当我通过控制器(通过 savePlace 操作)保存记录时,我在 JS 控制台中看到了这个错误:

SyntaxError: JSON.parse: unexpected end of data at line 1 column 1 of the JSON data

我尝试过不在模型上设置任何东西以及在模型上设置虚拟数据,但我得到了同样的错误。我也是用户 ember-cli http-mocks 作为处理 JSON 响应的测试后端。我意识到这可能是响应,但我不确定如何配置响应。

以下是相关代码:

路线/地点/new.js:

import Ember from 'ember';

export default Ember.Route.extend({
  model: function() {
    return this.store.createRecord('place');
  },
});

控制器/地方/new.js:

import Ember from 'ember';

export default Ember.Controller.extend({
  actions: {
    saveGeom(geom) {
      this.get('model').set('geometry', geom);
    },
    savePlace(data) {
      this.get('model').set('name', this.get('name')).set('description', this.get('description'));
      this.get('model').save().then(function() {
          alert("SUCCESS");
        }, function(error) {
          console.log(error);
        });
    }
  }
});

服务器/模拟/place.js:

  placeRouter.post('/places', function(req, res) {
    res.setHeader('Access-Control-Allow-Methods', 'POST');
    res.send({
      "places": {
            id: 1,
            name: "Triangle",
            description: "Ryan Christiani",
            geometry: {
              "type": "Polygon",
              "coordinates": [
                [
                  [-84.32281494140625,34.9895035675793],
                  [-81.73690795898438,36.41354670392876],
                  [-83.616943359375,  34.99850370014629],
                  [-84.05639648437499,34.985003130171066],
                  [-84.22119140625,   34.985003130171066],
                  [-84.32281494140625,34.9895035675793]
                ]
              ]
            }
        }
    });
  });

谢谢!

【问题讨论】:

  • 有同样的问题。你解决了吗?

标签: ember.js ember-data ember-cli http-mock


【解决方案1】:

我认为您在 JSON 对象的错误位置使用了错误的括号。 看看这个页面 http://www.tutorialspoint.com/json/json_syntax.htm

【讨论】:

  • 嗨,杰克,感谢您的回复。我检查了 JSONLint,它是有效的 JSON。我确实看到了您所说的关于复数形式的内容 - JSON 不遵循正确的约定。但是,我确实发现了这个问题:我在第一个参数中为 placeRouter.post() 函数使用了错误的参数。它应该是“/”而不是“/places”。但是,我不知道为什么我的控制台会抛出 JSON.parse 问题 - 也许我的服务器正在返回整个 /places 索引视图,这是一个数组,而 Ember 需要一个对象。
  • 好的,听起来不错!对我来说,JSON 看起来很奇怪,通常只对外部使用方括号,对所有内部内容使用大括号
【解决方案2】:

http-mocks 配置错误。应该就是下面这个代码sn-p。取而代之的是,服务器以一组对象响应(“GET /”的响应)。不知道为什么会触发 JSON.parse 错误,但这是正确的配置。

  placeRouter.post('/', function(req, res) {
    res.setHeader('Access-Control-Allow-Methods', 'POST');
    res.send({
      'places': [
{
            id: 1,
            name: "Using Ember CLI to create a Fixture Adapter.",
            description: "Ryan Christiani",
            geometry: {
              "type": "Polygon",
              "coordinates": [
                [
                  [-84.32281494140625,34.9895035675793],
                  [-81.73690795898438,36.41354670392876],
                  [-83.616943359375,  34.99850370014629],
                  [-84.05639648437499,34.985003130171066],
                  [-84.22119140625,   34.985003130171066],
                  [-84.32281494140625,34.9895035675793]
                ]
              ]
            }
        }]});
  });

【讨论】:

    猜你喜欢
    • 2015-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-27
    • 2020-09-15
    • 1970-01-01
    相关资源
    最近更新 更多