29

我已经设法使用 REST APIfetch()处理 url 包含最少参数(和使用GET)的数据。

如何通过POST请求检索集合?

4

4 回答 4

63

另请注意,fetch 支持 Jquery.ajax 参数,因此您可以在调用中轻松设置 type = post。

Messages.fetch({data: {api_key: 'secretkey'}, type: 'POST'});

更多参数: http ://api.jquery.com/jQuery.ajax/

于 2011-09-28T12:50:06.877 回答
3
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);
}
于 2014-01-07T14:22:48.053 回答
2

您可能需要扩展 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;
}

它使用“创建”而不是“读取”。乍一看,这是我首先尝试的方法,尽管可能有更优雅的方法来做到这一点。

这种方法的缺点是您的应用程序中基本上有框架代码,如果框架发生更改,您可能会遇到问题。您最好将此更改划分为单独的层,以便轻松更新新的框架版本。

于 2011-06-21T16:45:28.093 回答
2

Backbone.sync 是用于通过模型与服务器交互的函数。您可以提供自己的实现,该实现为“读取”方法而不是 GET 发出 POST 请求。请参阅http://documentcloud.github.com/backbone/#Sync

于 2011-06-21T16:46:19.607 回答