繁体   English   中英

如何在 ajax 调用期间从 Rails 控制器方法返回值?

[英]How to return value from a Rails controller method during an ajax call?

<%= form_for(@mymodel, remote: true, html: { id: 'match_form' }) do |f| %>
        <!-- I need to check if @mymodel.match_id matches the value generated by a controller function -->
   <%= f.submit 'Save', class: 'btn btn-primary', id: 'match_submit', style: "width:38px;padding:0px" %> 
   <%= button_tag 'Cancel', class: 'btn btn-secondary', id: 'match_cancel', style: "width:52px;padding:0px" %>
<% end%>


<script type='text/javascript'>
    $(function() {
      $(document).on("click", "#match_submit", function(event){
        $.ajax('my_controller_method', {
          type: 'GET',
          dataType: 'script',
          data: {
            mid: $("#").val(),  // how do I pass @mymodel.match_id here?
          },
          error: function(jqXHR, textStatus, errorThrown) {
          return console.log("AJAX Error: " + textStatus);
        }
      });      
    });
  </script>

我有上面的 JavaScrpt 代码,它对 Rails 控制器方法进行 ajax 调用。

我想检查此 ajax 调用中传递的值是否与某个值匹配。 如果没有,我想显示只有一个Ok按钮的模式错误消息。

我可以想到两种方法来实现这一目标:

  1. 我可以从控制器方法返回正确的值(这需要通过运行 SQL 查询进行一些计算。这就是我在控制器方法中执行此操作的原因)并检查 JavaScript 中的相等性,如果不匹配则抛出 JavaScipt 警报。

    问:为此,我想知道如何将控制器函数(在 ajax 调用期间调用)中的数字返回给 JavaScript

  2. 我可以检查控制器本身内部的匹配,然后在控制器函数本身中呈现引导模式

    问:为此,我想知道如何在我的控制器函数中呈现引导模式(显示一条文本消息和一个Ok按钮)。

如果我理解你的问题。 我更喜欢第二种方法(因为如果您可以在没有它的情况下提供信息,那么强制用户按下按钮是没有意义的)。

<% if your_match_function or value %>
   <div> Ok </div>
<% else %>
   <script type="text/javascript"> 
      $('#myModal').modal('show')
   </script>
<% end %>

但是,对于第一种方法,您也可以使用相同的方法,但在 ajax 请求的结果中呈现此片段。 并且不要忘记为模态弹出窗口添加 HTML。 https://getbootstrap.com/docs/4.0/components/modal/

def my_controller_method
 # assign your value here like,
 @message = 'Error occured!'
end

制作一个js文件,

my_controller_method.js.erb

在这个js文件中做,

$("#mymodaldiv").html("<%= j render(partial: 'my_partial_page',locals: {msg: @message}) %>");

在这里, mymodaldiv 是您必须从发生 AJAX 调用的位置放入文件的 div 的 ID,

<div id='mymodaldiv'></div>

和 my_partial_page 是您必须使用 msg 变量来构建页面的部分的名称。 作为,

_my_partial_page.html.erb

文件 _my_partial_page.html.erb 中的代码如下所示,

<h1><%= msg %></h1>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM