0

それほどかさばらないようにこのスクリプトを単純化しましたが、その要点は、関数 getList() がないため、毎秒参照エラーが発生し続けることです。setInverval() を上下に移動しようとしましたが、ほとんど何もしません。匿名関数が getList を呼び出しており、それが定義されていないことがわかります。

それが違いを生む場合、mootoolsに干渉しないようにjqueryの競合を追加する必要があり、joomla 1.5を実行しています

jQuery(document).ready(function($) {
function getList(){
i=0;
$.getJSON(
    "./test.php",
    function(data) 
    {   
        while(data.streams[i]){
            channel[i] = data.streams[i];
            stats[i] = data.status[i];
            title[i] = data.title[i];
            viewers[i] = data.viewers[i];
            i++;
        }
    }
  );
}
setInterval("getList()", 1000);
});

コンソール経由でデバッグしてみましたが、コンソール デバッグはまだ初心者なので、うまくいきませんでした。このプログラムは単独で動作し、joomla と jquery の競合はありません。HTML ファイル上にあるため、何が問題なのかわかりません :/

4

2 に答える 2

6

(文字列を渡すことによって)の eval スタイル バージョンを使用する場合setInterval()、関数はグローバルである必要があります。とにかくこれは悪いことなので、代わりに次のようにします。

setInterval(getList, 1000);

したがって、引数が必要な場合に備えて、文字列を再度渡すことはありません。次のようにします。

setInterval(function() {
    getList(whatever, ...);
    // you can have more code here and even access local variables
}, 1000);
于 2012-04-19T05:39:16.817 に答える
3
setInterval(getList, 1000);

setInterval (およびsetTimeout ) には、関数への参照が必要です。関数を文字列として渡すと、使用する場合と同じリスクがありますeval

関数の代わりに文字列を setTimeout() に渡すと、eval を使用するのと同じ危険があります。文字列リテラルはグローバル コンテキストで評価されるため、文字列がコードとして評価される場合、setTimeout() が呼び出されたコンテキスト内のローカル シンボルは使用できません。

于 2012-04-19T05:37:40.733 に答える