事件YUI,每两秒一次

时间:2012-05-20 23:40:04

标签: jquery yui

我想用YUI创建一个每两秒一次的事件,刷新页面。

var companymain = {
init: function() {
  companymain.form = document.getElementById('companymain');
  //I need a event or something and repet this function.
  YAHOO.util.Event.addListener(companymain.form, 'EVENTNEED', companymain.submit_func);},

  submit_func: function(e) { //stuff refresh page}

想法? 问候。

2 个答案:

答案 0 :(得分:1)

你似乎想要做的事情并非如此。以下显示了您需要实现的一般想法:

function repeatedRefresh(delay) {
   // Ajax code goes here

   setTimeout(repeatedRefresh, 2000);
}    
setTimeout(repeatedRefresh, 2000);

这声明了repeatedRefresh()函数并在2000ms后调用它。函数本身将执行Ajax调用以更新页面,然后使用setTimeout()在2000ms之后将另一个调用排队。我建议将setTimeout()置于Ajax完成/成功回调中,以便后续调用在前一个调用完成后2000ms发生。

我已经将实际的Ajax代码留在了上面,因为我不熟悉YUI(除了非常一般的方式),但是因为你用jQuery标记了你的问题,这是一种方式用jQuery做到这一点:

function repeatedRefresh(delay) {
   $.ajax({
      url : "yourURLhere",
      data : "optionalDataHere",
      // other ajax params here as needed,
      success : function(result) {
         // do something with result (display it on your page somehow),
         // then queue up the next refresh
         setTimeout(repeatedRefresh, 2000);
      }
   });       
}    
setTimeout(repeatedRefresh, 2000);

或者,如果您的服务器端代码返回HTML,您可以使用.load() method自动将返回的HTML加载到特定元素(例如div)中来简化操作:

function repeatedRefresh() {
   $('#elementToUpdate').load('yourURLhere', function() {
      setTimeout(repeatedRefresh, 2000);
   });
}
setTimeout(repeatedRefresh, 2000);

最后,尝试使用现有的companymain结构:

var companymain = {
   init: function() {
      setTimeout(companymain.submit_func, 2000);
   },
   submit_func : function() {
      // YUI or jQuery (or other) Ajax code here

      setTimeout(companymain.submit_func, 2000);
   }
};    
companymain.init();

答案 1 :(得分:0)

当然,setTimeout没有错,但YUI 2有YAHOO.lang.later(http://developer.yahoo.com/yui/docs/YAHOO.lang.html#method_later),YUI 3有YUI.later(http ://yuilibrary.com/yui/docs/api/classes/YUI.html#method_later)两者都可以选择定期调用函数而不是一次(因此不需要在代码中定义两次硬编码延迟;))