【问题标题】:Function inside for loop getting "i" variable undefined in sqlite executesql Query javascript [duplicate]for循环中的函数在sqlite executesql中获取未定义的“i”变量查询javascript [重复]
【发布时间】:2011-09-19 10:11:41
【问题描述】:

可能重复:
Javascript closure inside loops - simple practical example


我正在使用 web 服务通过使用 javascript 以 JSON 的形式获取数据,并希望将该数据存储在 Sqlite 数据库中。这里我使用for循环通过executeSql Query将数据一一存储到数据库中。但问题是 for 循环中的函数使“i”值超出范围意味着显示未定义。我试图在过去 5 天之前解决这个问题。有什么建议吗?

谢谢

function GetGeoValues() {
    $.get("http://example.in/projects/api.php?usn=user&pwd=****&var=something", function (Jdata) {
        var geoid = new Array();
        var geoname = new Array();
        var i;
        for (i = 0; i < Jdata.vact_geography.length; i++) {
            geoid.push(Jdata.vact_geography[i].geo_id);
            geoname.push(Jdata.vact_geography[i].geo_name);
            db.transaction(function (transaction) {
                alert(geoid[i]); // here i showing undefined
                transaction.executeSql('INSERT INTO vact_geography VALUES(' + parseInt(geoid[i]) + ',"' + geoname[i] + '")');
            });
        }
    });
}

【问题讨论】:

  • 函数 (transaction,i) 在参数中传递 ivalue
  • @Felix Kling ...非常感谢..你只需保存我接下来的 5 天..在 10 分钟内解决...再次感谢您

标签: javascript sqlite for-loop


【解决方案1】:

我不确定,但如果function(transaction) 在异步模式下执行,就会发生这种情况。在这种情况下,for 循环结束后的变量i 必须等于Jdata.vact_geography.length,结果geoid[i] 等于undefined。要解决此问题,请尝试以下操作:

function GetGeoValues() {
  $.get("http://example.in/projects/api.php?usn=user&pwd=****&var=something",
         function(Jdata) {
           var geoid=new Array();
           var geoname=new Array();
           for(var i=0;i<Jdata.vact_geography.length;i++) {
             geoid.push(Jdata.vact_geography[i].geo_id);
             geoname.push(Jdata.vact_geography[i].geo_name);
           }
           db.transaction(function(transaction) {
             for(var i=0;i<geoid.length;i++) {
               alert(geoid[i]); // here i showing undefined
               transaction.executeSql('INSERT INTO vact_geography VALUES('+parseInt(geoid[i])+',"'+geoname[i]+'")');
               // All INSERT's executed in one transaction
             }
           });  
         }
       ); 
}

【讨论】:

  • 你能帮我如何在 phonegap 应用程序中使用 javascript 在 FOR 循环中编写 SELECT 查询
【解决方案2】:

这里考虑了内部函数和外部函数的概念。所以外部函数有 var i。但是在内部函数中 i 没有定义。那就是它的抛出错误为“未定义”

【讨论】:

  • 这是不正确的。内部函数是一个闭包,可以访问在更高范围内定义的所有变量。问题是在调用函数时,i 的值不是数组中的有效索引。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-28
  • 1970-01-01
  • 2018-07-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多