0

YUIを使用して、2秒ごとにページを更新するイベントを作成したいと思います。

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()関数を宣言し、2000ms後にそれを呼び出します。関数自体はAjax呼び出しを実行してページを更新し、setTimeout()2000ms後にそれ自体への別の呼び出しをキューに入れるために使用します。setTimeout()前の呼び出しが完了してから2000ミリ秒後に後続の呼び出しが発生するように、Ajax完了/成功コールバックの内部に配置することをお勧めします。

私はYUIに精通していないため(非常に一般的な方法を除いて)、実際のAjaxコードを上に残しましたが、質問にjQueryのタグを付けているので、これはjQueryでそれを行う1つの方法です。

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)どちらにも、関数を1回ではなく定期的に呼び出すオプションがあります(したがって、コードでハードコードされた遅延を2回定義する必要はありません;))

于 2012-05-21T13:00:19.343 に答える