2

我自定义了RESTAdapter以连接到 RestHeart 服务器(用于 mongodb 的 RestFull Web 网关服务器):

import DS from 'ember-data';

export default DS.RESTAdapter.extend({
  host:'http://127.0.0.1:8080',
  namespace: 'boards'
});

我创建了一个模型来测试:

import DS from 'ember-data';

export default DS.Model.extend({
  identity: DS.attr()
});

一切正常,但是当我在记录上使用 save 方法时(开发人员):我在浏览器控制台中有一个警告:

服务器为 POST http://.../boards/Developer返回了一个空字符串,该字符串 无法解析为有效的 JSON。返回 null 或 {}。

和以下错误:

SyntaxError:在 XMLHttpRequest 的完成 (jquery.js:9255) 的 ajaxConvert (jquery.js:8787) 的 parse () 处 JSON 输入意外结束。(jquery.js:9548)

我知道为什么:RESTAdapter 正在等待 JSON 响应,而当添加 => 时,restHeart 服务器返回一个空响应,因此 jQuery 在尝试解析空响应时会导致错误。

使用以前版本的 ember-data,可以使用钩子ajaxOptions将 jQuery ajax 请求的 dataType 变量设置为“*” :

export default DS.RESTAdapter.extend({
  ajaxOptions(url, type, options) {
    var hash = this._super(url, type, options);
    hash.dataType = "*";
    return hash;
  },
  host:'http://127.0.0.1:8080',
  namespace: 'boards'
});

使用 ember-data 2.16,ajaxOptions现在是私有的,我不知道如何修改 dataType 变量...以便 null 响应不会被解析为 JSON 响应

版本:

  • 余烬数据 2.16
  • 余烬 2.18
4

1 回答 1

2

找到解决方案

export default DS.RESTAdapter.extend({
  ajaxOptions: function(url, type, options) {
    // get the default RESTAdapter 'ajaxOptions'
    var hash = this._super(url, type, options);

    // override if it's a POST request
    if (type == 'POST') {
      hash.dataType = 'text';
    }
    return hash;
  },

  ajaxSuccess: function(jqXHR, data) {
    if (typeof data === 'string') {
      // return an empty object so the Serializer handles it correctly
      return {};
    } else {
      return data;
    }
  },
  host:'http://127.0.0.1:8080',
  namespace: 'boards'
});

奇怪的是,它在没有任何警告或错误的情况下工作,因为我不知道我是否尊重 RESTAdapter 类的封装......

请参阅Ember-data 2.6 和 2.7 发行说明

于 2018-01-23T09:56:17.187 回答