我自定义 RESTAdapter 以连接到RestHeart服务器(RestFull网站) mongodb的网关服务器):
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:JSON输入的意外结束 在解析() 在ajaxConvert(jquery.js:8787) 完成后(jquery.js:9255) 在XMLHttpRequest。 (的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响应
版本:
答案 0 :(得分:1)
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类的封装......