Javascript 大多数情况下,Rails JSON请求未到达控制器
我很难诊断以下问题。我有一些服务器端跟踪代码,所以我们在单击下载链接时将json请求传递给控制器。这将触发服务器端跟踪调用 下面的代码在Chrome中的Heroku上运行良好。然而,当我们进入生产(mt)时,我们开始出现一些奇怪的行为。如果在Chrome中单击下载一次,则不会进行跟踪。如果单击两次,它将跟踪第二次单击。如果您使用IE11,它会像预期的那样工作,生成跟踪事件。如果您使用Firefox,它永远不会用于生产或登台 我们已经玩了一堆没有结果的东西。请帮忙 Rails 3.2.19和Ruby 2.1.0 物控器 物秀观Javascript 大多数情况下,Rails JSON请求未到达控制器,javascript,ruby-on-rails,ruby,json,ruby-on-rails-3,Javascript,Ruby On Rails,Ruby,Json,Ruby On Rails 3,我很难诊断以下问题。我有一些服务器端跟踪代码,所以我们在单击下载链接时将json请求传递给控制器。这将触发服务器端跟踪调用 下面的代码在Chrome中的Heroku上运行良好。然而,当我们进入生产(mt)时,我们开始出现一些奇怪的行为。如果在Chrome中单击下载一次,则不会进行跟踪。如果单击两次,它将跟踪第二次单击。如果您使用IE11,它会像预期的那样工作,生成跟踪事件。如果您使用Firefox,它永远不会用于生产或登台 我们已经玩了一堆没有结果的东西。请帮忙 Rails 3.2.19和Rub
“垂直对齐:顶部”),thing.zip_文件,类:'js download thing',标题:“download thing”,rel:“tooltip”,数据:{切换:“tooltip”,位置:“顶部”,标题:“download thing”,thing_id:thing.id}%>
应用程序布局
跟踪部分
$(function(){$('.js下载东西')。单击(function(){
thing_id=$(this.data(“thing id”)
url=“/”+thing_id+”.json”;
$.get(url);})})
该链接会将用户发送到新页面,不是吗
因此,跟踪调用需要在链接加载之前完成,否则它将不会被调用
也许您的生产环境速度明显加快,因此呼叫没有时间加载
我将返回false在链接上单击code>,然后在该ajax请求上通过回调将用户发送到下载链接
我可能完全偏离了这一点,但根据我的经验,我不知道你可以在点击链接后一直处理js,而不会在某种程度上停止它 PS-我在不同的对象上使用了几乎完全相同的图案,效果很好。该对象的区别在于rails服务器将下载的对象发送给用户,而不是将它们定向到外部链接。我们试图避免将请求完全路由到服务器,以避免可能导致用户重复单击链接的延迟。您可以在单击链接时禁用该链接。或者将其切换到加载指示器。我还建议使用google analytics事件进行此类跟踪,它们非常轻量级,可能会减少内部跟踪造成的任何延迟。
def show
authorize! :view, @thing, :message => "You do not have access to this thing. Is your subscription current?"
respond_to do |format|
format.html { track_event(current_user, "Viewed thing", {name: @thing.name}) }
format.json do
track_event(current_user, "Downloaded thing", {name: @thing.name})
render json: { :success => "success" }
end
end
end
<div class="thing_label" data-container="<%= thing.name.parameterize %>-thing">
<% if !thing.zip_file.blank? %>
<%= link_to (image_tag "cloud.png", height:'30', width:'30', :style => "vertical-align:top"), thing.zip_file, class: 'js-download-thing', title: "Download Thing", rel:"tooltip", data: {toggle:"tooltip", placement:"top", title:"Download Thing", thing_id: thing.id} %>
<% end %>
<%= thing.name.upcase %>
</div>
</div>
</main>
<%= render 'layouts/tracking' %>
</body>
</html>
<script> $(function(){ $('.js-download-thing').click(function(){
thing_id = $(this).data("thing-id")
url = "<%= things_path %>/" + thing_id + ".json";
$.get(url); }) }) </script>