0

在我的应用程序中,每隔 10 秒,它会调用这个 ajax 来重新加载收到的邮件数量。
但是,随着时间的流逝,我的 PC 似乎变得越来越热,即使我什么都不做,只是停留在应用程序的同一页面上。

我想在每次运行时再增加 10 秒。
然后它重置为 0,当整个页面再次加载时。
是否可以?

refresh_mail_count.js

jQuery(document).ready(function () {
    refreshMail();
});


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

refresh_mail.js.erb

$('#message_count').html("<%= j(render(:partial => 'layouts/message_received_count', :object => @message_count)) %>");
setTimeout(refreshMail,10000);
4

2 回答 2

2

您可以在视图上定义一个全局 javascript 变量。window.timerCounter = 0然后增加这个变量refresh_mail.js.erb

window.timerCounter += 1
setTimeout(refreshMail, 10000 + (window.timerCounter * 10000));
于 2013-02-06T12:46:38.813 回答
0

您可以轻松地将 setTimeout 从 erb 文件中移出并移至 AJAX 调用的完整函数中。结果看起来像这样:

var emailPollDelay, initialEmailPollDelay = 10000, 10000; jQuery(document).ready(function () { refreshMail(); });

function refreshMail() { $.ajax({ url: "/messages/refresh_mail", type: "GET", dataType: "script", complete: function() { setTimeout(refreshmail, (initialEmailPollDelay += emailPollDelay); } }); }

于 2013-02-06T12:51:49.530 回答