如何在RubyonRails中调用onclick javascript上的操作

如何在RubyonRails中调用onclick javascript上的操作,javascript,jquery,ruby-on-rails,ruby,ajax,Javascript,Jquery,Ruby On Rails,Ruby,Ajax,我想在controllers/static\u pages\u controller.rb中执行操作do文件: def fileopen my_file = File.new("public/CHNAME1.txt","w") my_file.write "\tfasf" my_file.close end (当我在helper中定义它并在view中调用它时,它工作得很好。) 在myview.html.erb中,我想要一些类似于 我该

我想在controllers/static\u pages\u controller.rb中执行操作do文件:

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

    end
(当我在helper中定义它并在view中调用它时,它工作得很好。)

在myview.html.erb中,我想要一些类似于
我该怎么做? 我尝试了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中使用块来完成,如下所示:

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
这段代码可能会对您当前的代码给出某种响应,但您可能需要更好地理解&Rails的工作方式,以便更好地帮助您


Ajax的工作原理

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

Ajax用于从JS中提取数据(这是通过Rails中的
respond\u to
函数处理的,您可以使用它以某种方式修改您的页面。很多人对Ajax感到困惑,但它实际上非常简单——它只是javascript从另一个页面提取数据,允许您使用该数据操纵页面


在视图中使用Ajax

这对您很重要的原因是因为您提到您不知道如何处理应用程序的
成功
回调。希望我的解释能告诉您,
$.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);
      }
  });
});

你试过JQuery了吗?我想这对我的开发时间真的很有帮助,而且非常简单。谢谢你的帮助,但是用$(“#按钮”)。单击(函数(),我只想当我单击该按钮时,fileopen将执行(写入文本文件),你能在“$(“#按钮”)中更正我的代码吗。单击(函数(){$.ajax({url:/static#pages fileopen),键入:“POST”,数据:{name:$(this).val()},成功:函数(数据){//append data to your page$(“page_元素”).html(data);}}}})您必须使用Ajax调用
fileopen
,正如我所解释的那样。然而,我对将
放在视图中如何执行控制器操作感到非常困惑?您是否在某处有一个名为
fileopen
的帮助程序?好的,有很多潜在的原因说明它不起作用。首先,调用帮助程序是一种错误比通过JS调用控制器函数容易得多。我的第一个问题是-您是否为
/static\u pages/fileopen
设置了路由?好的-路由是POST还是GET?其次,您必须查看AJAX是否启动。您应该在
.on('click')之后添加警报
事件,查看它在被单击时是否实际调用了JS。之后,我们需要查看Ajax是否正在ping控制器。凯,这意味着事件正在触发。现在需要做的是测试Ajax是否实际触发。要做到这一点,在Chrome中,右击页面,选择
inspect element
,然后选择go至
Network
选项卡。在这里,当您单击该按钮时,您将看到是否正在进行Ajax调用。我们需要知道当您单击该按钮时是否有其他请求