【问题标题】:Rails/JavaScript onclick send value through helper method, Ajax RequestRails/JavaScript onclick 通过辅助方法发送值,Ajax 请求
【发布时间】:2019-09-19 01:12:23
【问题描述】:

我有一个 Rails 方法可以转换日期输入并返回一个数字。我花了一些时间来创建它,所以我想继续使用它。未存储数据。我想做的是创建一个简单的 JS 输入来获取数据并通过方法发送。

所以本质上我的方法是这样的:

def date_converter(user_number)
 blah blah blah
 if blah < 2069
  error
 els if blah > 2069
  convert user_number.year
 else
  this number
 end
end

然后在我的 HTML 中我有一个基本的 JS 输入:

<p> Enter in Date </p>
<input id="check_number">
<button type="button" onclick="numberFunction()">Submit</button>
<p id="demo"></p>

<script>
 function numberFunction() {
  var x, dispay_value;
  x = document.getElementById('check_number').value;
  document.getElementById('demo').innerHTML = display_value;
 }
</script>

所以我需要通过该方法发送 x,然后将结果发送到 innerHTML。使用 Ajax,我使用该方法更新了我的 PostsController,但取消了参数。我创建了一条路线:

post 'posts/date_converter' => 'posts#date_converter'

然后在我的帖子 > 显示我更新了脚本:

function numberFunction() {
 user_number = $('check_number').val();
 $.ajax({
     url: 'week_date',
     type: 'GET',
     dataType: 'html',
     data: {
         number: user_number,
     }
 }).done(function(res) {
     $('#demo').html(res);
 });
}

我结束了

ActiveRecord::RecordNotFound(找不到带有 'id'=date_converter 的帖子):

我认为这可能是使用 Post 的路线问题,所以我尝试使用 Get。同样的问题。尝试将其放入它自己的部分并在 Post > Show 和相同的问题上呈现部分。

编辑:所以我做了一些额外的改变。我保留了这条路线。添加到ajax请求:

beforeSend: function(xhr) {xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'))}

我更新了控制器以拉入当前帖子 (@post = Post.find(params[:id])),即使我不想将它绑定到当前帖子,然后将路线更新为:

get '/posts/:id/week_date' => 'posts#week_date'

所以当我运行它时,我得到:

ActiveRecord::RecordNotFound(找不到带有 'id'=posts 的帖子)

如果我将 ajax 请求更改为特定的 url,例如:

url: '1/date_converter'

这不是我想要的,我最终得到了

NameError(未定义的局部变量或方法 `user_number'

总而言之,如果我在我的 ajax 请求中使用特定 ID - 这与我想要的相反,那么它甚至不会将值传递给局部变量。

【问题讨论】:

  • 您的要求并不完全清楚。如果您想提交表单,请按照您现在的方式进行。如果您说您要发出一个执行 just 的 Ajax 请求,然后创建一个接收其输入并返回输出的路由,然后通过(您喜欢的任何 Ajax 机制)发出该请求并处理结果。
  • 如何将 JS 上的输入传递给 helper 中的 rails 方法? Rails 端没有表格/模型。该方法只是一个助手。因此,创建一个 rails 表单需要构建它和一个控制器。只需将输入值传递给方法。
  • 你不能。除非您将其提交给控制器操作并以这种方式提交给您的辅助方法。

标签: javascript ruby-on-rails


【解决方案1】:

你应该使用ajax

将函数“date_converter”移动到您的控制器

def date_converter
  number = params[:number]
  blah blah blah
  if blah < 2069
   error
  els if blah > 2069
   convert
  else
   this number
  end
end

然后,定义 date_converter 路径并从 rails 路由获取操作(例如等于:users/date_converter)并为您的 js 创建 ajax

function numberFunction() {
  dispay_value = $('check_number').val();
  $.ajax({
      url: 'users/date_converter',
      type: 'GET',
      dataType: 'html',
      data: {
          number: dispay_value,
      }
  }).done(function(res) {
      $('#demo').html(res);
  });
}

【讨论】:

  • 做了一些小改动,但试了一下。看起来它失败了。不知道是控制器问题还是路由问题。
  • 可能是cors。我知道它的来源相同,但有时我需要在 beforeSend 中设置 csrf 令牌
  • 所以我在ajax中添加了: beforeSend: function(xhr) {xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').属性('内容'))}。我将网址更新为“posts/1/date_converter”。更新了获取 'posts/:id/date_converter' 的路线,甚至放入了 set_post 方法来拉入帖子。同样的问题。
  • @Jake "同样的问题" 与 what?!
  • 有效问题。我将更新问题,说明我已采取哪些步骤使其更清晰。
猜你喜欢
  • 2017-02-06
  • 1970-01-01
  • 1970-01-01
  • 2018-06-21
  • 2012-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多