2011-09-19 3 views
0

가능한 중복 :
Javascript closure inside loops - simple practical example기능은 "내가"변수 SQLite는 executesql 쿼리에 정의되지 않은 자바 스크립트


내가의 형태로 데이터를 가져 오기 위해 웹 서비스를 사용하고 있습니다 자바 스크립트를 사용하여 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] + '")'); 
      }); 
     } 
    }); 
} 
+0

기능 (트랜잭션을, i)는 펠릭스 클링 @ 인수 – K6t

+0

에 ivalue을 통과 ... 감사 Alot..U은 감사합니다 ... 내 옆에있는 오일은 .. 10 분에 해결 저장 너 다시 한번 –

답변

0

확실하지는 않지만, 비동기 모드에서 function(transaction)을 실행하면 이러한 일이 발생할 수 있습니다. 이 경우 for 루프가 완료된 후에 변수 iJdata.vact_geography.length과 같아야하고 결과적으로 geoid[i]undefined과 같아야합니다. 이 다음에 시도 workarround하려면

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 
      } 
      }); 
     } 
     ); 
} 
+0

유튜브에서 SELECT 쿼리를 작성하는 방법을 알려주십시오. – nida

0

여기서 내측 및 외측 기능 함수 개념이 고려된다. 그래서 외부 함수는 var i를가집니다. 그러나 내부 함수에서 나는 정의되지 않았다. 그 던지 오류가 "정의되지 않음"으로 표시됩니다.

+0

그건 맞지 않아. 내부 함수는 클로저이며 상위 범위에 정의 된 모든 변수에 액세스 할 수 있습니다. 문제는 함수를 호출 할 때'i'의 값이 배열에서 유효한 인덱스가 아니라는 것입니다. –

관련 문제