我希望每次通过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电话?
答案 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请求,同时异步更新分析信息