0

我想用 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}

想法?问候。

4

2 回答 2

1

您似乎想要做的并不是真正的事件之类的事情。下面显示了您需要实现的总体思路:

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

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

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

我已经把实际的 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()方法将返回的 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();
于 2012-05-21T01:29:46.843 回答
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)两者都可以选择定期调用函数而不是一次(因此无需在代码中定义两次硬编码延迟;))

于 2012-05-21T13:00:19.343 回答