将参数从Rails视图发送到Javascript以进行AJAX调用

时间:2018-10-16 03:54:44

标签: javascript ruby-on-rails json ajax

我有一个列出产品的Rails项目。我有一些JavaScript代码,可以对产品进行无限滚动。我现在要添加一个过滤功能,该功能允许用户过滤产品。 URL中有一些参数可以告诉控制器要过滤的内容,并且可以正常工作,但是当我滚动到页面底部时,我的JavaScript文件进行了AJAX调用以加载更多产品,但是我不知道该怎么做将参数从Rails视图获取到该AJAX调用的数据字段中。

我尝试过的是在视图中将此代码分配给JavaScript中的变量一个参数:

<%= javascript_tag do %>
  var params = '<%= params.to_json.html_safe %>';
<% end %>

然后我的AJAX调用以加载更多产品是这样的:

$.ajax({
  url:'/products/index.js',
    type:'GET',
    data:params
  })

问题是调用Products控制器操作时使用的参数格式不正确。最终结果如下:

Started GET "/products/index.js?{%22search_term%22:%22product%22,%22option_one%22:[%224%22],%22option_two%22:[%223%22],%22order%22:%22newest%22}"

它将用%22替换params哈希中的引号。我可以看到的另一件事可能是一个问题,就是option_one和option_two是可以包含多个数字的数组。我不确定是否会处理 也是正确的。

我在这里找不到同样问题的问题。谢谢!

2 个答案:

答案 0 :(得分:0)

如果要发送参数的所有键值,则直接在 data 属性中发送参数。

var params = '<%= params %>';

$.ajax({
 url: '/products/index.js',
 type: 'GET',
 data: params
});

答案 1 :(得分:0)

所以问题出在我的Rails视图中。我不应该使用单引号。这是有效的方法:

<%= javascript_tag do %>
  var params = <%= params.to_json.html_safe %>;
<% end %>

看起来JavaScript可以处理json对象并将其用于AJAX调用中的data参数,并通过在其中加引号将其转换为字符串。