복붙노트

[SQL] 웹 SQL 데이터베이스 + 자바 스크립트 루프

SQL

웹 SQL 데이터베이스 + 자바 스크립트 루프

나는이 밖으로 내려고 노력하고있어하지만 내 자신에 보일 수 없다 ... 나는 웹 SQL DB를 가지고 노는 그리고 난 루프가 제대로 동작하지 않습니다. 나는 사용한다:

for (var i=0; i<=numberofArticles-1; i++){  
    db.transaction(function (tx) {  
    tx.executeSql('INSERT INTO LOGS (articleID) VALUES (?)',  [i]);
  });
 };

그리고 나는 내가 점진 값을 얻을하지 않습니다 ... 5의를 얻을. 캔 누구의 제안은 내가 잘못하고있어 무엇을 내가 대해 생각을해야 하는가?

해결법

  1. ==============================

    1.그것은 시간 tx.executeSql 화재에 의해, 루프가 반복 완료하고 내가 여러 번 변경되었음을 함수가 비동기처럼 보이는합니다.

    그것은 시간 tx.executeSql 화재에 의해, 루프가 반복 완료하고 내가 여러 번 변경되었음을 함수가 비동기처럼 보이는합니다.

    당신은 폐쇄와 함께이 문제를 해결할 수 있습니다.

    for (var i=0; i<=numberofArticles-1; i++){ 
        function (value) { 
            db.transaction(function (tx) {  
            tx.executeSql('INSERT INTO LOGS (articleID) VALUES (?)',  [value]);
          });
        }(i); // <-- CALL the function
     };
    
  2. ==============================

    2.주위에 그것을 다른 방법을 수행합니다

    주위에 그것을 다른 방법을 수행합니다

    <script>
        numberofArticles = 5;
        db = openDatabase("websql", "0.1", "web-sql testing", 10000);
        db.transaction(function(tx) {
            tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, articleID int)');
        });
        db.transaction(function (tx) {  
            for (var i=0; i<=numberofArticles-1; i++){  
                tx.executeSql('INSERT INTO LOGS (articleID) VALUES (?)',  [i]);
            };
        });
    </script>
    

    이 경우 불필요한 대체 루프 외부와의 적절한 방법

        for (var i=0; i<=numberofArticles-1; i++){  
          (function(i) {
            db.transaction(function (tx) {  
                    tx.executeSql('INSERT INTO LOGS (articleID) VALUES (?)',  [i]);
            });
          })(i);
        };
    
  3. from https://stackoverflow.com/questions/4825455/web-sql-database-javascript-loop by cc-by-sa and MIT license