函数内部循环获取“i”变量未定义在sqlite executionql中查询javascript

时间:2011-09-19 10:11:41

标签: javascript sqlite for-loop

  

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


我使用webservice通过使用javascript以JSON的形式获取数据,并希望将该数据存储在Sqlite数据库中。这里我用循环来通过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] + '")');
            });
        }
    });
}

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我不确定,但如果function(transaction)在异步模式下执行,则会发生这种情况。在这种情况下,i循环完成后变量for必须等于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
             }
           });  
         }
       ); 
}
相关问题