2011-01-28 6 views
7

나는 이것을 알아 내려고하고 있지만 내 자신 만의 것으로는 보이지 않습니다. ...
웹 SQL DB를 가지고 놀고있어 제대로 작동 할 수 없습니다 그것으로. 내가 값 증분을하지 않습니다 ..웹 SQL 데이터베이스 + 자바 스크립트 루프

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

그리고 5의를 얻을 수 :
내가 사용합니다.
누구나 내가 뭘 잘못하고 무엇을 생각해야한다고 제안 할 수 있습니까?

답변

6

에 불필요한 tx.executeSql이 실행될 때까지 루프가 루핑을 끝내고 i이 여러 번 변경되었습니다.

클로저로 해결할 수 있습니다.

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

@ 데이비드 Dorward 당신이 조금 sintax (자바 스크립트가 아니라 websql)을 설명해 주시겠습니까? 특히 줄 "} (i); // <- 함수를 호출하십시오". 코드를 복사 할 수는 있지만 완전히 이해하고 싶습니다. –

+4

함수의 끝 부분에'(모든 인수)'를 붙임으로써 함수를 호출합니다. 'function() {}()'은'function foo() {}와 같습니다. foo();'나중에 사용하기 위해'foo'를 유지하지 않는다는 것을 제외하고는. – Quentin

+0

@David Dorward 나는 고마워한다. –

11

그것에게 다른 주변 방법 수행

<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); 
    }; 
관련 문제