如何在RubyonRails中调用onclick javascript上的操作
我想在controllers/static\u pages\u controller.rb中执行操作do文件:如何在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中,我想要一些类似于 我该
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调用。我们需要知道当您单击该按钮时是否有其他请求