【问题标题】:Sending a Javascript request in rails在 Rails 中发送 Javascript 请求
【发布时间】:2010-01-02 15:07:23
【问题描述】:

我试图创建一个通知用户任何新私人消息的系统,消息控制器的 index 方法创建到 @messages 和 @newmessages 的实例变量,两者都在 index.html.erb 中使用,我想使 index.js.erb 使我网站上的 flash 消息框出现。

我让 jquery 每隔几秒运行一个函数,运行的函数是

function checkagain(){
 //Start a Timer, dont want it bombarding the server with constant requests
 $.timer(10000,function(){
  $.getScript("/messages.js");
  //RECURSE, see you again in 10 seconds
  checkagain();
 });
}

$.getScript 似乎并没有让它运行 index.js.erb 上的代码,这很简单:

alert("RESPONDING");

我似乎无法让它触发该页面上的代码。

我发现 /messages.js 不返回任何 javascript,和 index.html.erb 一样

控制器的索引动作是:

def index
    @messages = Message.find(:all, :conditions => "receiver_id = '#{current_user.id}' AND `read` = '1'")
    @newmessages = Message.find(:all, :conditions => "receiver_id = '#{current_user.id}' AND `read` = '0'")
end

【问题讨论】:

  • 离题,但你在那里做的不是递归。该评论具有误导性。
  • 它在该函数的新版本中本质上是相同的,但将更高的延迟传递给下一个函数调用,然后在延迟超过 10 分钟时停止
  • 重点是checkagain和匿名函数都没有同时入栈两次;因此,没有递归。

标签: jquery ruby-on-rails


【解决方案1】:

尝试附加一个随机查询字符串来强制浏览器重新下载 js 文件:

$.getScript("/messages.js?random=" + Math.random());

【讨论】:

  • Jquery 似乎已经这样做了,我不能在 .js 文件中使用 ruby​​
【解决方案2】:

您能从消息控制器的索引操作中发布一些代码吗?如果 messages.js 没有返回您期望的 javascript,这似乎不是 jquery 问题。

您是否有一个应该返回该警报调用的 messages/index.js.erb 视图,或者您的公共目录中是否有一个 messages.js 文件?

【讨论】:

    【解决方案3】:

    您可以查看Juggernaut,它允许您使用 Flash 8 资源推送到客户端浏览器。

    【讨论】:

    • id 而不是使用 flash,因为 90% 的客户端只会在他们身上发生 flash 崩溃
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-18
    • 2015-06-10
    • 2012-07-21
    • 2016-03-24
    • 1970-01-01
    • 2015-09-29
    • 2011-06-06
    相关资源
    最近更新 更多