【发布时间】:2011-09-19 16:56:45
【问题描述】:
我已经设法将 REST API 用于 fetch() 数据,其中 url 包含最少的参数(并使用 GET)。
如何通过POST 请求检索集合?
【问题讨论】:
标签: javascript jquery backbone.js backbone.js-collections
我已经设法将 REST API 用于 fetch() 数据,其中 url 包含最少的参数(并使用 GET)。
如何通过POST 请求检索集合?
【问题讨论】:
标签: javascript jquery backbone.js backbone.js-collections
您可能需要扩展 Collection 对象以安装您自己的获取约定。在这样做时,您可能会提供自己的 fetch 函数。比如:
fetch : function(options) {
options || (options = {});
var model = this;
var success = function(resp) {
if (!model.set(model.parse(resp), options)) return false;
if (options.success) options.success(model, resp);
};
var error = wrapError(options.error, model, options);
(this.sync || Backbone.sync)('create', this, success, error);
return this;
}
它使用“创建”而不是“读取”。乍一看,这是我首先要尝试的方法,尽管可能有更优雅的方法。
这种方法的缺点是,您的应用程序中基本上有框架代码,如果框架发生变化,您可能会遇到问题。您最好将此更改划分为单独的层,以便轻松更新新的框架版本。
【讨论】:
Backbone.sync 是用于通过模型与服务器交互的函数。您可以提供自己的实现,该实现为“读取”方法而不是 GET 发出 POST 请求。见http://documentcloud.github.com/backbone/#Sync
【讨论】:
还要注意 fetch 支持 Jquery.ajax 参数,所以你可以在调用中轻松设置 type = post。
Messages.fetch({data: {api_key: 'secretkey'}, type: 'POST'});
【讨论】:
try {
// THIS for POST+JSON
options.contentType = 'application/json';
options.type = 'POST';
options.data = JSON.stringify(options.data);
// OR THIS for GET+URL-encoded
//options.data = $.param(_.clone(options.data));
console.log('.fetch options = ', options);
collection.fetch(options);
} catch (excp) {
alert(excp);
}
【讨论】: