如何在ruby on rails中对onclick javascript调用操作

How to call action on onclick-javascript in ruby on rails

本文关键字:onclick javascript 调用 操作 中对 rails ruby on      更新时间:2023-09-26

我想在controllers/static_pages_controller.rb:中执行一个操作do文件

def fileopen
        my_file = File.new("public/CHNAME1.txt","w") 
        my_file.write "'tfasf"
        my_file.close
    end

(当我在助手中定义它并在视图中调用它时,它工作得很好。)

在myview.html.erb中,我想要一些类似<button id="button" onclick="readfile()" />的东西我该怎么做?我在application.js 中尝试过

function readfile() {
  alert('readfile work')
  $.ajax({
  alert('ajax work')
      url: "/fileopen",
      type: "POST",
      ##don't know what to do to make fileopen work 
      }
  });
}

routes.rb

 match '/fileopen', to:'static_pages#fileopen', via: 'get'

似乎什么都没发生。只有第一个警报有效。

要直接回答您的问题,您必须能够在控制器中处理JS请求。这通常是通过在Rails中使用respond_to块来完成的,如下所示:

def fileopen
    respond_to do |format|
        format.js {
            my_file = File.new("public/CHNAME1.txt","w") 
            my_file.write "'tfasf"
            my_file.close
        }
    end
end

这段代码可能会对您当前的代码做出某种响应,但在这种情况下,您可能需要更好地理解Ajax和;轨道工作是为了帮助您更好地


Ajax的工作原理

Ajax是一种javascript技术,它向网站上的其他页面发送"异步"请求。从本质上讲,异步请求完全独立于主HTTP请求,基本上就像一个"伪"浏览器——在后台中工作

Ajax用于从启用JS的端点提取数据(这些端点由Rails中的respond_to函数处理,然后您可以使用它以某种方式修改页面。很多人对Ajax感到困惑,但它实际上很简单——它只是从另一个页面提取数据的javascript,允许您使用该数据操作页面


在视图中使用Ajax

这对你来说很重要的原因是你提到你不知道如何处理应用程序的success回调。希望我的解释能告诉你,$.ajax调用的成功部分应该用于将你从控制器收到的数据附加到你的页面上

这可以通过以下方式完成:

$("#button").click(function() {
  $.ajax({
      url: "/static_pages/fileopen",
      type: "POST",
      data: {name: $(this).val()},
      success: function (data) { 
          // append data to your page
          $("page_element").html(data);
      }
  });
});