0

我正在 Google App Engine 和 Python 上开发系统。以下 jQuery 代码用于定期更新时间。contentjQuery Ajax将以下 HTML 代码插入到div 中:

HTML:

...
{{product.name}}: <br />
Bidding time is approaching: <div id="timeToBid{{product.randomNo}}">{{timeToBid}}</div>
...

$(document).ready(function() {
  function updateTime() {
    $.ajax({
      url: "/timeToBid?productId={{product.key.id}}",
      cache: false,
      success: function(returndata){
        $('#timeToBid{{product.randomNo}}').html(returndata);
      }
    });
    setTimeout(updateTime, 1000);
  }
  updateTime();
});

服务器端程序:

class TimetoBid(webapp2.RequestHandler):
    def get(self):
        productId = self.request.get('productId')
        product = Product.get_by_id(productId)
        time = str(datetime.datetime.now() - product.bidTime)
        self.response.out.write(message)

但是,如果我单击页面中的其他按钮来更新contentdiv,除非我刷新整个页面,否则 updateTime() 函数仍在运行。另外,由于该功能不会停止,如果我多次进入该页面,问题会在一秒钟内运行多次。content如果div 使用其他 HTML 代码更新,如何停止该功能?

4

2 回答 2

1

将 的结果分配setTimeout给变量timer。更新内容 div 的代码可以调用clearTimeout(timer).

更新

另一种选择是让updateTime()函数检查内容 div 是否已更改并停止运行。

var oldContent;
function removeTimeToBid(str) {
    return str.replace(/<div id="timeToBid.*?<\/div>/, '');
}
function updateTime() {
   var newContent = removeTimeToBid($("#content").html());
   if (newContent != oldContent) { return; }
   $.ajax({
      url: "/timeToBid?productId={{product.key.id}}",
      cache: false,
      success: function(returndata){
        $('#timeToBid{{product.randomNo}}').html(returndata);
      }
   });
   setTimeout(updateTime, 1000);
}

function startUpdatingTime() {
    oldContent = removeTimeToBid($("#content").html());
    updateTime();
}
于 2013-02-23T10:04:55.623 回答
1

您应该使用 setInterval 而不是 setTimeout :

$(document).ready(function() {

  //Define variable to enable or disable the refresh function
  window.doRefresh = true;

  function updateTime() {

    //Execute AJAX request only if it is allowed
    if(!window.doRefresh)
        return;

    $.ajax({
      url: "/timeToBid?productId={{product.key.id}}",
      cache: false,
      success: function(returndata){
        $('#timeToBid{{product.randomNo}}').html(returndata);
      }
    });
  }

  //Permits to execute updateTime every seconds until clearInterval is called
  var intervalHandle = setInterval(updateTime, 1000);

  $('#myDiv').click(function(){
      //Stop definitely the interval code execution using
      clearInterval(intervalHandle);

      //Or use a variable to disable refreshing
      window.doRefresh = false;

      //Do some stuff...

      //Then enable refreshing like this
      window.doRefresh = true;
  });

});
于 2013-02-23T10:06:49.897 回答