【问题标题】:How to pass array from js to controller如何将数组从js传递到控制器
【发布时间】:2019-02-28 02:15:43
【问题描述】:

我的 javascript 文件 app/assets/javascript/pages/books_page.js 中有一个数组:

var booksPage = Backbone.Model.extend({
  defaults: {
    authors: []
  }
  ...

如何将它作为参数传递给我的控制器。我的控制器的路径是app/controllers/books_controller.rb ?

我想我可能需要一个 ajax 请求并尝试了以下方法,但它不起作用:

$.ajax({
        type: "post",
        url: "/books_controller",
        data: { list_authors: this.get('authors') },
      });

具体来说,我不确定 url 需要是什么。您在这里的帮助将不胜感激。谢谢。

【问题讨论】:

    标签: javascript ruby-on-rails ruby backbone.js


    【解决方案1】:

    Backbone(和 jQuery)应该为您完成所有繁重的工作。在模型中设置urlRoot

    var booksPage = Backbone.Model.extend({
      urlRoot: '/books',
      ...
    });
    

    然后在实例上调用save将数据发送到服务器:

    // Get or create `books` as a `booksPage` instance as usual...
    // Then make some changes to `books` using `books.set(...)`...
    books.save();
    

    【讨论】:

      【解决方案2】:

      您可以使用JSON.stringify,并从Controller JSON.parse(params) 解析它。

      $.ajax({
            type: "post",
            url: "/books_controller",
            data: { list_authors: JSON.stringify(this.get('authors')) }
      });
      

      【讨论】:

      • 但是网址呢??
      • @Jadoo 我不知道你的网址,只要确保传递正确的参数并让它们正确。
      【解决方案3】:
      type: 'POST', 
      url: `/books/${this.id}`, // or '/books/' + this.id,
      data: {
        _method: 'put'
      }
      

      这会将您路由到BooksController#update。您还需要将_method 条目合并到您的数据对象中。

      "注意:由于浏览器不广泛支持使用 GET 和 POST 以外的 HTTP 方法提交表单,所有其他 HTTP 方法实际上都是通过 POST 发送的,使用 _method 参数中指示的预期方法。Rails 会自动检测并补偿这。” - Working with JavaScript in Rails

      【讨论】:

      • 为什么不直接选择type: 'put'
      • @muistooshort 2.4 How do forms with PATCH, PUT, or DELETE methods work? 这是一项古老的工作,已经深入 Rails 以处理缺乏浏览器支持的问题。
      • @muistooshort 在 Rails 文档中至少可以追溯到 10 years ago
      • 但是你没有使用<form>
      • @muistooshort 嘘,不要让 Rails 知道! “解析 POST 数据时,Rails 会考虑特殊的 _method 参数”。 _method 用于 POST 请求,而不仅仅是表单提交。例如,一个remote: true 表单发送回一个 AJAX 请求。
      猜你喜欢
      • 1970-01-01
      • 2013-12-09
      • 2017-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-06
      • 1970-01-01
      相关资源
      最近更新 更多