如何将数组从js传递给控制器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将数组从js传递给控制器相关的知识,希望对你有一定的参考价值。

我的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') },
      });

具体来说,我不确定网址需要是什么。非常感谢您的帮助。谢谢。

答案

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();
另一答案

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

$.ajax({
      type: "post",
      url: "/books_controller",
      data: { list_authors: JSON.stringify(this.get('authors')) }
});
另一答案
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

以上是关于如何将数组从js传递给控制器的主要内容,如果未能解决你的问题,请参考以下文章

如何将图像视图从改造加载的片段传递给子片段?

Laravel 5.2 - 如何将变量(数组和整数)从视图传递到控制器?

将数组数组从 Ajax 传递给控制器

如何将活动中的意图传递给已打开的片段

THREE.js - 大型int作为Uniform

如何将值从其他活动传递给 viewpager 片段?