2016-08-20 53 views
0

在我的Ember v2.7.0應用程序中,我需要使用不返回JSON負載的後端端點。但它表現得像REST端點,所以我想用DS.RESTAdapter來獲取數據並通過DS.Serializer轉換有效載荷。沒有JSON負載的Ember-data RESTAdapter

創建這個小Ember-twiddle,它只是試圖獲取數據與非JSON有效載荷。它失敗了。據我所知,它代碼DS.RESTAdapter失敗,試圖從有效載荷中提取JSON。這樣我的序列化程序就沒有機會處理數據了。

這似乎有點奇怪,因爲我認爲Serializer是負責咀嚼負載的層。

  1. 是否可以使用DS.RESTAdapter來查詢非JSON端點?
  2. 如果不是,那麼在非JSON端點上使用類似REST的行爲最簡單的方法是什麼?
+1

您的端點返回的數據格式是什麼? – xcskier56

+0

@ xcskier56沒有什麼可以很好地解析:https://gist.github.com/MichalBryxi/76131c6985637e2b140a4e52dae40aef –

回答

2

什麼你需要做的,是建立自己的適配器,從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; 
    } 
});