2011-01-28 20 views
7

Ben bunu anlamaya çalışıyorum ama kendi başıma görünemiyorum ...
Web SQL DB'leri ile çalışıyorum ve düzgün çalışması için bir döngü alamıyorum Bununla. Ben değerleri artan alamadım ..Web SQL Veritabanı + Javascript döngü

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

Ve sadece 5 en olsun:
Ben kullanırlar.
Neyi yanlış yaptığımı ve neyi düşünmem gerektiğini öneren var mı?

cevap

6

gereksizdir ve bu zamana kadar tx.executeSql yangınları, döngü bitmiş döngü ve i defalarca değiştirildi.

Bunu bir kapatma ile çözebilirsiniz.

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

@ David Dorward biraz SINTAX (javascript değil websql) açıklayabilir misiniz? Özellikle satır "} (i); // <- CALL işlevi". Demek istediğim, kodu kopyalayabilirim, ama tamamen anlamak isterim. –

+4

Bir işlevi, sonuna ('herhangi bir hata) 'yapıştırarak çağırırsınız. 'function() {}()', '' foo() {} işlevine benzer; foo(); 'Dahası, daha sonra kullanmak için dolamıyor. – Quentin

+0

@David Dorward Anlıyorum, teşekkürler. –

11

bunu diğer etrafında yol yapın:

<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> 

Ve alternatif, döngü ile uygun yolu olan dışında bu durumda fonksiyon asenkron gibi görünüyor

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