我修改了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进行参数检查。欢迎替代方案 尝试{失败 .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\"}]"
最新消息,这修复了错误消息。我现在用反斜杠从服务器获取数据,但是ember数据忽略了它。串行器能解决这个问题吗?
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 :(得分: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);
});
},