每次在ajax调用时渲染部分

时间:2014-06-09 09:35:21

标签: ruby-on-rails ruby ajax

我希望每次通过ajax对ruby on rails中的动作进行ajax调用时,都会运行这三行代码。

$('#mixpanel-tracking-page-view').attr('data-name', "<%= @analytics_event[:name] %>");
$('#mixpanel-tracking-page-view').attr('data-properties', "<%= @analytics_event[:properties].to_json.html_safe %>");
trackPageLoadEvents();

现在我在每个.js.erb文件中写这些行。我不想这样做。这是处理问题的第三类方法。

任何人都可以指导我。对于html请求,我添加了布局。怎么样的ajax电话?

2 个答案:

答案 0 :(得分:1)

有一个全局AjaxSuccess回调。它将在每次成功的Ajax调用时执行。您需要在布局中添加它:

$(document).ajaxSuccess(function() {
  $('#mixpanel-tracking-page-view').attr('data-name', "<%= @analytics_event[:name] %>");
  $('#mixpanel-tracking-page-view').attr('data-properties', "<%=       @analytics_event[:properties].to_json.html_safe %>");
  trackPageLoadEvents();
});

如果您只需要在调用特定操作时执行它,则可以像这样检查URL:

$( document ).ajaxSuccess(function( event, xhr, settings ) {
  if ( settings.url == "controller/action" ) {
    ...
  }
});

答案 1 :(得分:1)

我们这样做:

#app/assets/javascripts/application.js
$(document).on("click", "a[rel*=your_ref]", function(e){
   e.preventDefault();
   // Ajax call here
})

这将允许您创建如下链接:

<%= link_to "your link", link_path, rel: "your_ref" %>

这意味着当您调用这些链接时(I.E您要发送特定类型的Ajax请求),您将能够使用该代码中包含的标准功能

-

<强>布局

有趣的是你称它为“部分” - 你最好在没有任何布局的情况下呈现action - 这样,你就可以在应用程序中调用任何路径,并获得纯粹的{{ 1}}回到回复中:

HTML

我们发现了here

-

<强>的Ajax:成功

在参考#app/controllers/application_controller.rb Class ApplicationController < ActionController::Base layout :select_layout private def select_layout false if request.xhr? end end 的回答时,您需要注意Max Al Farakh,因为它是全局功能:

  

每当Ajax请求成功完成时,jQuery就会触发   ajaxSuccess事件。已注册的所有处理程序   此时执行.ajaxSuccess()方法。

直接参考您的查询,您需要从裸ajaxSuccess代码中发出任何ERB代码。 js代码在erb文件夹中运行良好,但/views可以静态加载,这意味着您的asset_pipeline代码无法按预期呈现。

更好的方法是将数据传回ERB,尽管在发送HTML时定义这一点可能会有些棘手。

-

<强>推

如果您采用了在没有布局的情况下接受ajax响应的策略,我会使用Pusher 来创建辅助数据流,我将能够更新页面一个成功的电话:

response

这将允许您调用所需的任何Ajax请求,同时异步更新分析信息