首页 > 解决方案 > 如何在 ajax 调用期间从 Rails 控制器方法返回值?

问题描述

<%= 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在我的控制器函数中呈现引导模式(显示文本消息和仅一个按钮)。

标签: javascriptruby-on-railsajax

解决方案


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 是 div 的 id,您必须将其放入文件中,从那里发生 AJAX 调用,

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

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

_my_partial_page.html.erb

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

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

推荐阅读