2017-08-07 93 views
1

当用户在应用程序上时,我的混合应用程序正在将数据从服务器推送到cordova应用程序。在我的服务器上,我的JSON中有2000个数据。我成功地将2000个数据插入到我的SQLite数据库中。但是,我意识到该程序插入了与服务器中最后一个数据相同的2000个数据。以下是我的代码。Cordova SQLite,从服务器获取值并插入到SQLite数据库

 $http.get("http://131.4.44.69/php3/fetchSAPInfo.php?key=" + lastSAPOID).success(function (data){ 
       alert(lastSAPOID); 
       if(data == 1){ 
        alert("data is up to date"); 
       }else{ 
        alert("data is updating......"); 

        var i; 
        for(i=0; i<data.length; i++){ 
         var SAP_OID = data[i].SAP_OID; 
         var SAP_Asset = parseInt(data[i].SAP_Asset); 
         var SAP_Description = data[i].SAP_Description; 

         db.transaction(function(tx) { 
          alert(SAP_Asset); 
          tx.executeSql('INSERT INTO SAPInfo VALUES (?,?,?)', [SAP_OID, SAP_Asset , SAP_Description]); 

         }, function(error) { 
          console.log(error); 
         }, function() { 
          alert("insert successfully"); 
         }) 
       } 
      }    
    }).then (function (response){ 
      alert("done and finished"); 
    }); 

我意识到代码,先去函数先运行db.transaction()函数。因此,该程序不会根据我的for循环获取JSON数据。我怎么解决这个问题?

回答

1

我花了一整天的时间弄清楚问题所在。我的for循环必须放入db.transaction()函数内。这是异步编程的问题。以下是我的答案。

 $http.get("http://131.4.44.69/php3/fetchSAPInfo.php?key=" + res).success(function (response){ 
       if(response == 1){ 
        console.log("data is up to date......."); 
       }else{ 
        console.log("data is updating........."); 

        db.transaction(function(tx) { 
        var i; 
         for(i=0; i<response.length; i++){ 
          var SAP_OID = response[i].SAP_OID; 
          var SAP_Asset = parseInt(response[i].SAP_Asset); 
          var SAP_Description = response[i].SAP_Description; 

          tx.executeSql('INSERT INTO SAPInfo VALUES (?,?,?)', [SAP_OID, SAP_Asset , SAP_Description]); 
         } 
        }, function(error) { 
          console.log(error); 
        }, function() { 
          console.log("insert successfully"); 
        }) 
      } 
    }).then (function (response){ 
      console.log("done and finished"); 
    }); 
相关问题