使用 Rails Turbolinks 从 JS 清除重定向(使用 Url 参数)

Clean redirect from JS using Rails Turbolinks (with Url params)

正在启动 Rails 网络 url: /analytics?param1=a¶m2=b

如果用户更改日历日期,它会使用新选择的日期(start_date 和 end_date)触发 JS 函数。 然后我必须将它们与之前的 params1 和 params2 一起传递给控制器​​并重新加载页面。

新网站 URL: /analytics?param1=a¶m2=b&start_date=YYYY&end_date=YYYY

注意:param1 和 param2 可能缺失且可选。

我想使用 Turbolinks,但我想知道哪种方法最干净。

  $('#reportrange').on('apply.daterangepicker', function(ev, picker) {
        let startDate = picker.startDate.format('YYYY-MM-DD');
        let endDate   = picker.endDate.format('YYYY-MM-DD');
        Turbolinks.visit(....)
    });

根据您所需的浏览器支持级别,您可以使用 URLSearchParams:

$('#reportrange').on('apply.daterangepicker', function(ev, picker) {
  const startDate = picker.startDate.format('YYYY-MM-DD');
  const endDate   = picker.endDate.format('YYYY-MM-DD');

  const params = new URLSearchParams(window.location.search)
  params.set('start_date', startDate)
  params.set('end_date', endDate)

  Turbolinks.visit(window.location.pathname + '?' + params.toString())
});

如果您不想继续沿用目前的路径(我从您的问题中了解到这一点,所以我假设您确实想留下来),那么您需要将 window.location.pathname 更改为无论目标路径是什么。

有关文档,请参阅 https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams