2013-10-10 9 views
0

아래 기능은 항상 'Inserted serial : undefined'를 반환합니다. 나는 왜 이것을 수행하고 있는지를 깨닫기 위해 고심하고있다. 만약 내가 console.log db.transaction 전에 직렬 (단지 숫자)을 출력한다면. db.transaction data [i]가 갑자기 정의되지 않은 이유는 무엇입니까?웹 SQL 트랜잭션에서 변수에 더 이상 액세스 할 수 없습니까?

var localSerials = [340, 234, 545, 239, 546]; 

    function downloadUpdates(localSerials) { 
    console.log("Updating local database..."); 
    $.getJSON("update.php", function(data) { 
     for (var i = 0; i < data.length; i++) { 
     if (localSerials.indexOf(data[i]) == -1) { 
      db.transaction(function (tx) { 
      tx.executeSql('INSERT INTO serials (serial) VALUES (' + data[i] + ')'); 
      console.log("Inserted serial: " + data[i]); 
      }); 
     } 
     } 
    }); 
    } 

답변

1

비동기 트랜잭션은 for 루프 내에 있으며,이를 사용하면 재사용하지 않고 많은 병렬 트랜잭션을 만들 수 있습니다. 루프 외부의 트랜잭션을 넣고 모든 요청에 ​​대해 트랜잭션을 다시 사용하십시오.

var localSerials = [340, 234, 545, 239, 546]; 

function downloadUpdates(localSerials) { 
    console.log("Updating local database..."); 
    $.getJSON("update.php", function(data) { 
    db.transaction(function (tx) { 
     for (var i = 0; i < data.length; i++) { 
     if (localSerials.indexOf(data[i]) == -1) { 
      tx.executeSql('INSERT INTO serials (serial) VALUES (' + data[i] + ')'); 
      console.log("Inserted serial: " + data[i]); 
     }); 
     } 
    } 
    }); 
} 
관련 문제