Отправьте параметры из представления Rails в Javascript для вызова AJAX - PullRequest
0 голосов
/ 16 октября 2018

У меня есть проект 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}"

Он заменяет кавычки в хэше params на% 22.Еще одна проблема, которую я вижу, это то, что option_one и option_two - это массивы, которые могут содержать несколько чисел.Я не уверен, будет ли это обрабатываться правильно.

Я не смог найти здесь вопрос с такой же проблемой.Спасибо!

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Так что проблема была в моем форматировании в представлении Rails.Я не должен был иметь одинарные кавычки.Вот что сработало:

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

Похоже, JavaScript может обрабатывать объект json и использовать его для параметра данных в вызове AJAX, и, имея там кавычки, он превращал его в строку.

0 голосов
/ 16 октября 2018

Если вы хотите, чтобы все ключевые значения параметров были отправлены, отправьте параметры напрямую в атрибут data .

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

$.ajax({
 url: '/products/index.js',
 type: 'GET',
 data: params
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...