2013-08-27 92 views
0

我修改BLOGGR客戶端示例應用來在本地主機從靜止接口讀:8080/API使用端口與Ember數據RESTAdapter

App.Store = DS.Store.extend({ 
    revision: 12, 
    adapter: DS.RESTAdapter.extend({ 
    url: 'localhost:8080/api';}) }); 

我還使用

<script src="js/libs/jquery-1.9.1.js"></script> 
<script src="js/libs/handlebars-1.0.0.js"></script> 
<script src="js/libs/ember-1.0.0-rc.7.js"></script> 
<script src="js/libs/ember-data-master.js"></script> 

在Firefox ,我收到以下javascript錯誤:

第113行中的ember-1.0.0.rc.7.js //當使用新的錯誤時,我們無法對Chrome進行參數檢查。歡迎替代品 嘗試{失敗 .fail(); } catch(e){error = e; }

在Chrome中,

有適配器不返回任何數據,但我在jQuery的

得到線8526的選項錯誤這裏是查詢的結果。也許反斜槓或引號正在殺死適配器。我可以用序列化程序解決這個問題嗎?

query: localhost:8080/api/posts 

"[{\"user\": \"joe\", \"update_time\": \"2013-08-25 23:15:03.011767\", \"create_time\":  \"2013-08-25 23:05:45.405645\", \"slug\": \"apple\", \"title\": \"apple\"}, {\"user\": \"bill\", \"update_time\": \"2013-08-26 00:38:36.713749\", \"create_time\": \"2013-08-26 00:37:04.935824\", \"slug\": \"orange-id\", \"title\": \"orange\"}]" 

最新新聞,修正了錯誤信息。我現在用反斜槓從服務器獲取數據,但是數據卻忽略了它。序列化程序可以解決這個問題嗎

App.Store = DS.Store.extend({ 
    revision: 12, 
    adapter: DS.RESTAdapter.extend({ 
    bulkCommit: false, 
    url: "http://localhost:8080/api/medbook", 
    primary_key: "user", 
    ajax: function (url, type, hash) { 
     hash.url = url; 
     hash.type = type; 
     hash.dataType = 'jsonp'; 
     hash.contentType = 'application/json; charset=utf-8'; 
     hash.context = this; 

     if (hash.data && type !== 'GET') { 
      hash.data = JSON.stringify(hash.data); 
     } 

     jQuery.ajax(hash); 
     }, 
    }) 
}); 

回答

0

它似乎不像串行器的問題。您包含的自定義適配器代碼不會在傳遞給jQuery.ajax的散列上定義成功或失敗屬性。因此,請求被髮送到服務器,但是它的響應被忽略。

您的自定義適配器將需要一個類似於內置的ajax方法 - 使用該代碼作爲起點,然後根據需要進行自定義。

https://github.com/emberjs/data/blob/master/packages/ember-data/lib/adapters/rest_adapter.js#L475

ajax: function(url, type, hash) { 
    var adapter = this; 

    return new Ember.RSVP.Promise(function(resolve, reject) { 
     hash = hash || {}; 
     hash.url = url; 
     hash.type = type; 
     hash.dataType = 'json'; 
     hash.context = adapter; 

     if (hash.data && type !== 'GET') { 
     hash.contentType = 'application/json; charset=utf-8'; 
     hash.data = JSON.stringify(hash.data); 
     } 

     if (adapter.headers !== undefined) { 
     var headers = adapter.headers; 
     hash.beforeSend = function (xhr) { 
      Ember.keys(headers).forEach(function(key) { 
      xhr.setRequestHeader(key, headers[key]); 
      }); 
     }; 
     } 

     hash.success = function(json) { 
     Ember.run(null, resolve, json); 
     }; 

     hash.error = function(jqXHR, textStatus, errorThrown) { 
     if (jqXHR) { 
      jqXHR.then = null; 
     } 

     Ember.run(null, reject, jqXHR); 
     }; 

     Ember.$.ajax(hash); 
    }); 
    },