-1

getJSON メソッドを使用して、データベースにあるデータを for ループを介して HTML ページに投稿しています。しかし、forループが現在オンになっている整数に応じて、データベース内のさまざまなテーブルを呼び出す関数が必要です。次のようになります。

for (var r = 0; r < 8; r++){
     $.getJSON("PHP-PAGE.php?jsoncallback=?", function(table+r) {
          //function stuff here
     });
}

しかし、これを行おうとすると、「テーブル + r」が構文エラーのフラグを立てています。私は何を間違っていますか?

4

4 に答える 4

2

関数を呼び出すのではなく、関数を定義しています。との間に式ではなく識別子(変数名)を入れる必要が(あります。)

ここでデータを渡すには、関数よりも広い範囲の変数を使用する必要があります。変数が変更される (そして関数が非同期的に呼び出される) ため、これを行うにはクロージャーを使用する必要があります。

function mkCallback(table) {
    var foo = "table" + table;
    return function () {
        // function stuff that uses foo here
        // foo from the time mkCallback was called to make this function
        //    will still be in scope
    };
}

for (var r = 0; r < 8; r++){
     $.getJSON("PHP-PAGE.php?jsoncallback=?", mkCallback(table+r));
}
于 2013-03-05T17:18:49.583 に答える
0

あなたがおそらく望んでいるのは

for (var r = 0; r < 8; r++){  //outer loop

     function(tablenum){  //closure function
         tablename = table+tablenum // saved reference to "table+r"
         $.getJSON("PHP-PAGE.php?jsoncallback=?", function() {
           //function stuff here, using tablename as the param
         });
     }(r)
}

これにより、反復値の値を維持するためのクロージャーが作成されます。コールバック関数で tablename を参照できます。これは、table+r と同等の値を参照します。

元の例の問題

  1. 呼び出している関数の引数ではなく、定義している関数のパラメーターとして table+r を入れていました
  2. r を参照するコールバックを取得しようとしていました。ただし、ループが実行されるまでコールバックは実行されないため、r はすべてのコールバック関数で 8 になります。
  3. 「table1」、「table2」を参照しようとしていた場合は、「table」+r が必要です。tableそれ以外の場合は、表示されたコードの範囲外の変数を参照していると思います。
于 2013-03-05T17:22:00.553 に答える
0

function(table+r) {table+rパラメータとしてを使用して関数を作成しようとしました+が、変数名では無効です。代わりに次のようなものが必要だと思います:

for (var r = 0; r < 8; r++){
     $.getJSON("PHP-PAGE.php?jsoncallback=?", 
     (function(currentR){
         return function() {
               var someVariable=table+currentR; // No idea where table came from...
               //function stuff here
         }
     })(r));
}

コールバックが呼び出されるまでに@Quentinが言及したようrに、最終的な値に達しているため、興味深いクロージャーです。

于 2013-03-05T17:22:36.580 に答える
-1

コールバックで変数を直接参照できrます。何でtableあるかわからない-JSON呼び出しからの戻りデータ?次のことを試してください。

for (var r = 0; r < 8; r++){
     $.getJSON("PHP-PAGE.php?jsoncallback=?", function(jsonReturnData) {
          //function stuff here
          alert(r);
     });
}
于 2013-03-05T17:19:50.067 に答える