Ember-没有 JSON 负载的数据 RESTAdapter
Ember-data RESTAdapter without JSON payload
在我的 Ember v2.7.0 应用程序中,我需要使用没有 return JSON 负载的后端端点。但它的行为类似于 REST 端点,所以我想我只会使用 DS.RESTAdapter
来获取数据并通过 DS.Serializer
.
转换有效负载
创建了这个 Ember-twiddle,它只是尝试使用非 JSON 负载获取数据。它失败了。据我所知,它在 DS.RESTAdapter
代码中失败,试图从有效负载中提取 JSON。这样我的序列化程序就没有机会处理数据了。
这看起来有点奇怪,因为我认为 Serializer 是负责处理有效负载的层。
- 是否可以使用
DS.RESTAdapter
查询非 JSON 端点?
- 如果没有,在非JSON 端点上实现类 REST 行为的最简单方法是什么?
您在这里需要做的是创建您自己的从 DS.RESTRAdapter
派生的适配器,然后覆盖它的 ajaxOptions-method。您可以在那里将其 dataType
更改为 text
。我想他们为了您的确切目的将它分成了自己的方法,因为它没有做太多其他事情。
Ember 指南中有一个关于 customizing adapters 的页面可以帮助您入门,根据 Ember 存储库中的原始代码,它可能应该是这样的。
import DS from 'ember-data';
import Ember from 'ember';
const {
get
} = Ember;
export default DS.RESTAdapter.extend({
ajaxOptions(url, type, options) {
var hash = options || {};
hash.url = url;
hash.type = type;
hash.dataType = 'text';
hash.context = this;
if (hash.data && type !== 'GET') {
hash.contentType = 'text/plain; charset=utf-8';
}
var headers = get(this, 'headers');
if (headers !== undefined) {
hash.beforeSend = function (xhr) {
Object.keys(headers).forEach((key) => xhr.setRequestHeader(key, headers[key]));
};
}
return hash;
}
});
在我的 Ember v2.7.0 应用程序中,我需要使用没有 return JSON 负载的后端端点。但它的行为类似于 REST 端点,所以我想我只会使用 DS.RESTAdapter
来获取数据并通过 DS.Serializer
.
创建了这个 Ember-twiddle,它只是尝试使用非 JSON 负载获取数据。它失败了。据我所知,它在 DS.RESTAdapter
代码中失败,试图从有效负载中提取 JSON。这样我的序列化程序就没有机会处理数据了。
这看起来有点奇怪,因为我认为 Serializer 是负责处理有效负载的层。
- 是否可以使用
DS.RESTAdapter
查询非 JSON 端点? - 如果没有,在非JSON 端点上实现类 REST 行为的最简单方法是什么?
您在这里需要做的是创建您自己的从 DS.RESTRAdapter
派生的适配器,然后覆盖它的 ajaxOptions-method。您可以在那里将其 dataType
更改为 text
。我想他们为了您的确切目的将它分成了自己的方法,因为它没有做太多其他事情。
Ember 指南中有一个关于 customizing adapters 的页面可以帮助您入门,根据 Ember 存储库中的原始代码,它可能应该是这样的。
import DS from 'ember-data';
import Ember from 'ember';
const {
get
} = Ember;
export default DS.RESTAdapter.extend({
ajaxOptions(url, type, options) {
var hash = options || {};
hash.url = url;
hash.type = type;
hash.dataType = 'text';
hash.context = this;
if (hash.data && type !== 'GET') {
hash.contentType = 'text/plain; charset=utf-8';
}
var headers = get(this, 'headers');
if (headers !== undefined) {
hash.beforeSend = function (xhr) {
Object.keys(headers).forEach((key) => xhr.setRequestHeader(key, headers[key]));
};
}
return hash;
}
});