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

标签 javascript jquery ruby-on-rails ruby ajax

我想在 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/

相关文章:

javascript - 如何向相对于幻灯片位置向左/向右滚动的自动 Jquery 幻灯片添加控件

javascript - 使用 jQuery 对元素进行排序、删除和附加元素在 IE 中不起作用

ruby-on-rails - ruby 整数到 bool 值

ruby-on-rails - Handlebars 模板不会呈现 ember 数据对象

ruby-on-rails - 阵列::包括?在 ActiveRecord 集合上不调用 op==?

javascript - 使用Jquery删除div之间的div

javascript - 如何在屏幕顶部显示工具提示

javascript - 为什么html中的Form Action 会自动触发?

javascript - 使用 jQuery 从 JSON 对象值创建一个数组

php - 从mysql接收jquery进度条值