我想在 controllers/static_pages_controller.rb 文件中执行一个 Action :
def fileopen
my_file = File.new("public/CHNAME1.txt","w")
my_file.write "\tfasf"
my_file.close
end
(当我在 helper 中定义它并在 View 中调用它时,它工作得很好。)
在 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
}
});
}
路线.rb
match '/fileopen', to:'static_pages#fileopen', via: 'get'
似乎什么都没发生。只有第一个警报有效。
最佳答案
直接回答您的问题,您必须能够在 Controller 中处理 JS 请求。这通常是通过使用 respond_to
来完成的。在 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
此代码可能会给您当前代码的某种响应,但您可能需要更好地理解 Ajax 是如何实现的。 & Rails 的工作是为了更好地帮助你
Ajax 的工作原理
Ajax 是一种 javascript 技术,它向您网站上的其他页面发送“异步”请求。就其本质而言,异步请求是完全独立于您的主要 HTTP 请求完成的,并且基本上就像一个“伪”浏览器——在后台工作
Ajax 用于从启用 JS 的数据中提取数据 endpoints (这是用 Rails 中的 respond_to
函数处理的,然后您可以使用它以某种方式修改您的页面。很多人对 Ajax 感到困惑,但它实际上非常简单——它只是 javascript它从另一个页面提取数据,允许您使用该数据操作您的页面
在您的 View 中使用 Ajax
这对您很重要的原因是因为您提到您不知道如何处理应用程序的 success
回调。希望我的解释能告诉您 $.ajax
调用的成功部分应该用于附加您从页面上的 Controller 接收的数据
这可以通过以下方式完成:
$("#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);
}
});
});
关于javascript - 如何在 ruby on rails 中对 onclick-javascript 调用操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20141000/