2012-03-15 25 views
0

私は今夜インターネット上で検索していますが、「解決策」がたくさんありましたが、残念ながら私のために働いていません。setIntervalが正しく動作しない

logbook = setInterval(function() { 
    $.getJSON("php/log.php", function(data) { 
     $.each(data.posts, function(i,data) { 
      $('#logspan').replaceWith(data.logupdate); 
     }); 
    }); 
}, 5000); 

:だから私は、私のページは以下のjavascriptビットを持って

...私はスタック上に、ここで見て、他の場所で、私は仕事であろうものを見つけることを望んでいますかの異なる答えを取得しようとします私はページを実行しますが、それは動作しますが、1回だけです。その後、間隔が完全に停止します(これはChromeとFirefoxにあります)。

次のように実行されていて、完全にその仕事をしているさらに別のスクリプトがあるので、これは、奇妙です:

var timer; 
function startCount() { 
    timer = setInterval(count,1000); 
} 
function count() { 
    var el   = document.getElementById('counter'); 
    var currentNumber = parseFloat(el.innerHTML); 
    el.innerHTML  = currentNumber+1; 
} 

私は二番目を切った場合、私はすでに最初のスクリプトが動作するかどうかを確認してみましたしかし、それはまだ行かない。では、最初の(JSON)スクリプトをどのように動作させることができますか?この問題のおかげで私の就寝時間を過ぎてしまいました。私は一歩進んだことはありません!!

任意の提案/ヒント/先端が高く評価されて、髪を引っ張る...

EDIT:私は「replaceWith」を交換し、「appendTo」を使用するときに[OK]を、私は、独特の何かを見つけ、#を更新しているようですlogspanは問題ありませんが、明らかに私自身のウェブページをスパムしたくありません。おそらく問題はどこかにあるのでしょうか?

+5

あなたのAjaxの成功コールバックは、JSONレスポンスにあったものは何でもして#logspanエレメント交換されているので、JSONの内容は同じidを持つ要素が含まれていない限り、その要素で二回目は存在しません。また、あなたが$ .eachの内部を置き換えることをやっているのは変です。 – nnnnnn

+0

コンソールにエラーがありますか? –

+0

コンソールですべてがOK: GET http://v.dof-games.net/php/log.php 200 OK 142ms jquery .... min.js(regel 140) GET http:// v。 dof-games.net/php/log.php 200 OK 127ms jquery .... min.js(regel 140) GET http://v.dof-games.net/php/log.php 200 OK 145ms jquery。 ... min.js(regel 140) –

答えて

2

は、合意されました。

  1. あなたが反復しているので、あなたがうっかり$ .getJSON()関数本体
  2. でデータを参照することができるよう、あなたの$ .each()関数本体内のデータとは異なる変数名を使用しますJSON呼び出しで返された投稿については、#logspanの本文を1回だけ空にしてから、各記事の内容を#logspanに順番に追加します。

    var logbookTimer = setInterval(function() { 
        $.getJSON("php/log.php", function(data) { 
         // Empty out the body of the log 
         $('#logspan').empty(); 
         // Add some content for each retrieved post 
         $.each(data.posts, function(i,d) { 
          $('<div>').html(d.logupdate).appendTo($('#logspan')); 
         }); 
        }); 
    },5000); 
    
+1

ここでは無名関数と名前付き関数の使用の違いは何ですか? –

+0

setInterval/setTimeout 2つのparamsが必要です。(1)実行する関数への参照、または実行するリテラルコード(2)コードを実行するまでに待機するミリ秒数。リテラルコードを使用するのは悪い習慣です。なぜなら、インターバルが実行されるたびにJavaScriptが関数を再評価する必要があるからです。 – zachelrath

+1

これは間違っています。関数が直接渡されたのか、変数に代入されたのかを区別することはできません。関数参照は関数参照です。私はあなたが 'setInterval'に**文字列**を渡すこととこれを混同していると思います。 –

-1

この方法を試してみてください

var logbook = function() { 
    $.getJSON("php/log.php", function(data) { 
     $.each(data.posts, function(i,data) { 
      $('#logspan').replaceWith(data.logupdate); 
     }); 
    }); 
}; 

setInterval(logbook, 1000); 
+2

違いは何ですか?なぜそれが助けになるのですか?郵便番号だけでなく、説明もしてください。 –

+0

いいえ、申し訳ありませんが、それでも#logspanは1回だけ更新されます。 :/ –