-1

我正在使用 getJSON 方法通过 for 循环将我在数据库中的数据发布到 HTML 页面中。但我希望函数根据 for 循环当前所在的整数调用数据库中的不同表,如下所示:

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

但是当我尝试这样做时,“table+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)
}

这会创建一个闭包来维护迭代值的值。您可以在回调函数中引用表名,这将引用相当于 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它将达到其最终值,因此有趣的closure

于 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 回答