我有一个每15秒运行一次的函数checkEvery15Seconds
。它会检查是否已将新注释添加到页面中。
按下提交按钮后,我有一个提交新评论的表单,然后在页面上显示新评论。
在添加新注释checkEvery15Seconds
的过程中,同时查询数据库,所以我最终在页面上有重复的注释(不是在数据库中,但这纯粹是一个JavaScript问题)。
如何让“submitComment”函数停止checkEvery15Seconds
并在“submitComment”函数执行完毕后重新启动它?
答案 0 :(得分:5)
在两个函数都可以访问的范围中添加一个名为some suspend15sCheck的布尔值。在添加评论时启用它,然后再将其设置为false。
在15sCheck功能中,您首先要检查是否可以检查: - )
var suspend15sCheck = false;
function addComment()
{
suspend15sCheck = true;
// add comment on base of form data
suspend15sCheck = false;
}
function myTimer()
{
if(suspend15sCheck === false)
{
// add comments via ajax request
// remember to check if the comments who will be added already exist :-)
}
}
答案 1 :(得分:0)
将其包装在允许其他功能在其上设置启动/停止标志的对象中。
function My15SecondsObj() {
var objSelf = this;
//
this.run();
}
My15SecondsObj.Paused = false;
My15SecondsObj.prototype.run= function() {
if (!Paused)
{
// Do your call here
}
var _this = this;
setTimeout(function() { _this.run(); }, 15000);
}
现在,当您想要使用此对象时,只需执行
var myObj = new My15SecondsObj();
当你想暂停时,
myObj.Paused = true;
并通过执行以下操作再次启动:
myObj.Paused = false;
如果你想变得非常疯狂,可以添加一些事件,以便其他对象可以订阅有关数据库更新成功的时间等的通知......
答案 2 :(得分:0)
最简单的解决方案:使用您打开和关闭的标记变量。 “checkEvery15Seconds”函数的第一行显示为:if (!global_checkingEvery15Seconds) return;
只需将该变量(无论您将其命名为全局或对象)设置为true,如果您希望打开检查,则将其设置为true,否则设置为off。
答案 3 :(得分:0)
您需要一个状态变量来指示评论ajax请求的当前状态
var requestComments = false;
if(requestComments === false) {
requestComments = true;
// make ajax request
// on ajax success/fail
requestComments = false;
}