【问题标题】:Fetch a collection using a POST request?使用 POST 请求获取集合?
【发布时间】:2011-09-19 16:56:45
【问题描述】:

我已经设法将 REST API 用于 fetch() 数据,其中 url 包含最少的参数(并使用 GET)。

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

【问题讨论】:

    标签: javascript jquery backbone.js backbone.js-collections


    【解决方案1】:

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

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

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

    【讨论】:

    • 虽然,我没有走这条路,但它确实帮助我弄清楚我可以专门为集合创建一个同步方法,所以谢谢和+1!
    • 好的,谢谢。鉴于上面只有一条线在变化,而且它的线馈送同步,似乎编写自定义同步是要走的路。我没有意识到在同一个应用程序空间中可能有不同的同步,但现在它是有道理的。在我对这种可能性敞开心扉后,我比试图回答这个问题的赞成票要好得多。
    【解决方案2】:

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

    【讨论】:

    • 我最初尝试采用这种方法。我不想为我的整个应用程序覆盖 Backbone.sync ......然后我意识到我可以为集合提供它自己的同步方法,所以我走那条路。谢谢..
    【解决方案3】:

    还要注意 fetch 支持 Jquery.ajax 参数,所以你可以在调用中轻松设置 type = post。

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

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

    【讨论】:

    • 我相信 0.5+ 附带...我当时使用的是 0.3.3
    • 还要注意,它会执行标准的 POST 请求,而不是像 Models 默认情况下那样使用 JSON 的原始帖子
    【解决方案4】:
    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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-27
      • 2012-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-07
      相关资源
      最近更新 更多