【问题标题】:Ember-data RESTAdapter without JSON payload没有 JSON 有效负载的 Ember-data RESTAdapter
【发布时间】:2016-08-20 21:08:08
【问题描述】:

在我的 Ember v2.7.0 应用程序中,我需要使用不返回 JSON 有效负载的后端端点。但它的行为类似于 REST 端点,所以我想我会使用 DS.RESTAdapter 来获取数据并通过 DS.Serializer 转换有效负载。

创建了这个小Ember-twiddle,它只是尝试使用非 JSON 有效负载获取数据。它失败了。据我所知,它在DS.RESTAdapter 代码中失败,试图从有效负载中提取 JSON。这样我的序列化器就没有机会处理数据了。

这似乎有点奇怪,因为我认为 Serializer 是负责咀嚼有效负载的层。

  1. 是否可以使用DS.RESTAdapter 查询非 JSON 端点?
  2. 如果不是,在非 JSON 端点上具有类似 REST 的行为的最简单方法是什么?

【问题讨论】:

标签: json rest ember.js ember-data


【解决方案1】:

您需要在此处创建自己的适配器,该适配器派生自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;
  }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多