【问题标题】:Force Backbone fetch to always use POST强制 Backbone fetch 始终使用 POST
【发布时间】:2013-03-11 22:32:45
【问题描述】:

我有一个集合,需要将一些数据发布到它的 url 以获取它需要的数据。这两个问题的答案,Fetch a collection using a POST request?Overriding fetch() method in backbone model,让我觉得我应该能够让它像这样工作:

fetch: function( options ) {
  this.constructor.__super__.fetch.apply(this, _.extend(options,{data: {whatever: 42}, type: 'POST'}));
}

,但 Firebug 仍然向我显示正在发生的 404 错误,因为正在针对有问题的 url 执行 GET(并且底层 Rails 路由只允许 POST)。这应该工作吗?如果是这样,我还能尝试什么?如果没有,我做错了什么?

【问题讨论】:

  • 您是否考虑过覆盖 Backbone 的 syncajax 方法?
  • 我愿意,如果 1) 我可以弄清楚如何,并且 2) 我可以确信覆盖所有同步(这听起来很难且涉及)是必要的,因为覆盖 fetch(看起来像应该很容易)没有机会工作。
  • 顺便说一句,实际答案是我链接到的帖子之一没有明确指出apply 的第二个参数必须是一个数组。哦。
  • 对,我错过了!我总是把callapply 签名搞混了。

标签: javascript backbone.js


【解决方案1】:

再次阅读问题后,这里有一种方法可以强制每次 fetch 调用使用 POST。 (感谢cmets)

yourCollection.fetch({
    data: $.param({id: 1234}), 
    type: 'POST', 
    success: function(d){
        console.log('success');
    }
});

另一种方法是覆盖 AJAX 实现本身,以对所有调用使用 POST

Backbone.ajax = function() {
    var args = Array.prototype.slice.call(arguments, 0);
    _.extend(args[0], { type: 'POST' });
    return Backbone.$.ajax.apply(Backbone.$, args);
};

【讨论】:

  • 并没有真正回答我关于为什么我没有工作的问题,但既然这样做了......谢谢:-)
  • 我刚刚在我的答案中添加了另一个选项来覆盖所有 AJAX 调用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-20
  • 1970-01-01
  • 2013-10-09
  • 2012-09-05
  • 1970-01-01
  • 2020-03-21
  • 1970-01-01
相关资源
最近更新 更多