0

我修改了 bloggr-client 示例应用程序以从 localhost:8080/api 的休息接口读取

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 错误:

ember-1.0.0.rc.7.js 中的第 113 行 // 使用新错误时,我们无法对 Chrome 进行参数检查。欢迎使用替代方法 try { fail .fail(); } 捕捉 (e) { 错误 = 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);
        },
  })
});
4

1 回答 1

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);
    });
  },
于 2013-08-28T00:36:20.350 回答