2012-12-25 32 views
0

我已经实现自动重新计数未读的数量。
它每15秒回传未读消息的数量。
但即使用户未登录,也会发生同样的情况。如何仅在登录时运行setInterval ajax调用?

如何阻止此问题?我想这样做,只有当用户已登录。

我有一个像爵士这样

jQuery(document).ready(function() { 
    refreshPartial(); 
    setInterval(refreshingPartial, 15000) 
}); 


function refreshingPartial() { 
    $.ajax({ 
    url: "/messages/refreshing_partial", 
    type: "GET", 
    dataType: "script", 
    }); 
} 

回答

2

使用内联JS

<% if current_user %> 
    <%= javascript_tag do %> 
     jQuery(document).ready(function() { 
      refreshPartial(); 
      setInterval(refreshingPartial, 15000) 
     }); 


     function refreshingPartial() { 
      $.ajax({ 
      url: "/messages/refreshing_partial", 
      type: "GET", 
      dataType: "script", 
      }); 
     } 
    <% end %> 
<% end %> 

OR

类添加到身体,如果用户登录并控制课程。

<body class="<%= "logged-in" if current_user %>"> 

</body> 

,改变你的JS有点

jQuery(document).ready(function() { 
    if ($("body").is(".signed-in")) { 
    refreshPartial(); 
    setInterval(refreshingPartial, 15000) 
    }; 
}); 
+0

这看起来很完美。谢谢! – HUSTEN

0

只有当用户在签署的refreshPartial js脚本应该呈现以下应该做的伎俩:

<script type="text/javascript"> 
    $(document).ready(function() { 
     <% if is_user_signed_in %> 
      refreshPartial(); 
      setInterval(refreshingPartial, 15000); 

      function refreshingPartial() { 
       $.ajax({ 
         url: "/messages/refreshing_partial", 
         type: "GET", 
         dataType: "script", 
       }); 
      } 
     <% end %> 
    }); 
</script> 
+0

您无法直接在js中检查会话变量。 Js已经预编译。 – emrahbasman

+0

不,这不会起作用 – HUSTEN

+0

您是否注意到了封闭的脚本标记?在.erb文件中,这应该是完美的。只有在文档被渲染后,脚本才会被编译。 refreshPartial()方法仅在用户登录时执行。让我知道您面临的问题。 – atmaish

相关问题