2016-01-13 60 views
1

我有我的第二個for循環的一個問題: 當L = 0時,第一tx.executeSql做的,但第二個之前,for循環遞增。 然後l = 1,第一個tx.executeSql做了一次,第二次做了兩次,但是在我的變量idAdresse中有不良信息。倍數的ExecuteSQL在for循環的jQuery

function majProspect (callback) 
{ 
    if(testerConnexion()) 
    { 
     _db.transaction(function (tx) { 
      //Sélection des prospects à mettre à jour dans Prisma 
      tx.executeSql("SELECT Clients.id,dateCreation,dateBasculeClient,code,designation,Clients.telephone,activite,fax,siret,conditionPaiement,livraison_L,livraison_Ma,livraison_Me,livraison_J,livraison_V,livraison_S,livraison_D,appel_L,appel_Ma,appel_Me,appel_J,appel_V,appel_S,appel_D,statut,Clients.mail,idAdresseFacturation,idAdresseLivraison, GROUP_CONCAT('#####'||Adresses.id||'@@'||type||'@@'||adresse||' @@'||ville||' @@'||codePostal||' @@'||pays||'@@'||adresse2||' @@'||Adresses.idSecteur||'@@'||Adresses.idClient||'#####') as adresses, GROUP_CONCAT('#####'||Contacts.id||' @@'||Contacts.civilite||' @@'||Contacts.nom||' @@'||Contacts.prenom||' @@'||Contacts.telephone||' @@'||Contacts.mobile||' @@'||Contacts.fonction||' @@'||Contacts.idClient||' @@'||Contacts.mail||'#####') as contacts, Clients.idSecteur as idSecteur FROM Clients LEFT JOIN Adresses ON Adresses.idClient = Clients.id and Adresses.isExport = 0 LEFT JOIN Contacts ON Contacts.idClient = Clients.id and Contacts.isExport = 0 WHERE (Adresses.isExport = 0 OR Clients.isExport = 0 OR Contacts.isExport = 0) and statut like 'PROSPECT%' GROUP BY Clients.id ", [], function (tx, res) { 
       var nbClientDejaTransferer = 0; 
       var nbClientATransfere = res.rows.length; 
       var listeIdAdresses = ""; 
       var idAdresses = ""; 
       var nbAdresseDejaTransferee = 0; 
       var nbListeAdressesDejaTransferee = 0; 
       if(nbClientATransfere == 0) 
       { 
        callback(); 
       } 
       else 
       { 
        for(var i = 0; i < nbClientATransfere; i++) 
        { 
         (function (j) { 
          if(res.rows.item(j).id) 
          { 
           $.ajax({ 
            method: "POST", 
            url: "http://www.xxx.php", 
            data: { action: "clotureJournee_saveProspect", 
             id: res.rows.item(j).id, 
             code: res.rows.item(j).code, 
             designation: res.rows.item(j).designation, 
             telephone: res.rows.item(j).telephone, 
             activite: res.rows.item(j).activite, 
             fax: res.rows.item(j).fax, 
             siret: res.rows.item(j).siret, 
             conditionPaiement: res.rows.item(j).conditionPaiement, 
             livraison_L: res.rows.item(j).livraison_L, 
             livraison_Ma: res.rows.item(j).livraison_Ma, 
             livraison_Me: res.rows.item(j).livraison_Me, 
             livraison_J: res.rows.item(j).livraison_J, 
             livraison_V: res.rows.item(j).livraison_V, 
             livraison_S: res.rows.item(j).livraison_S, 
             livraison_D: res.rows.item(j).livraison_D, 
             appel_L: res.rows.item(j).appel_L, 
             appel_Ma: res.rows.item(j).appel_Ma, 
             appel_Me: res.rows.item(j).appel_Me, 
             appel_J: res.rows.item(j).appel_J, 
             appel_V: res.rows.item(j).appel_V, 
             appel_S: res.rows.item(j).appel_S, 
             appel_D: res.rows.item(j).appel_D, 
             statut: res.rows.item(j).statut, 
             mail: res.rows.item(j).mail, 
             idAdresseFacturation: res.rows.item(j).idAdresseFacturation, 
             idAdresseLivraison: res.rows.item(j).idAdresseLivraison, 
             adresses: res.rows.item(j).adresses, 
             contacts: res.rows.item(j).contacts, 
             dateCreation: res.rows.item(j).dateCreation, 
             dateBasculeClient: res.rows.item(j).dateBasculeClient, 
             idSecteur: res.rows.item(j).idSecteur, 
             emailIntervenant:localStorage.getItem("_emailIntervenantEnCours") 
            } 
           }).done(function(data) { 
            var infosClient = jQuery.parseJSON(data); 
            if(infosClient.id != "0") 
            { 
             _db.transaction(function (tx) { 
              tx.executeSql("UPDATE Clients SET isExport = 1, id = ?, code = ?, statut = ? WHERE id = ?", [infosClient.id, infosClient.code, infosClient.statut, infosClient.ancienId], function (tx, res) { 
               tx.executeSql("UPDATE Contacts SET isExport = 1, idClient = ? WHERE idClient = ?", [infosClient.id, infosClient.ancienId], function (tx, res) { 
                nbClientDejaTransferer++; 
                if (infosClient.idAdresses !== "" && infosClient.idAdresses !== null) 
                { 
                 listeIdAdresses = infosClient.idAdresses.split('||'); 
                 for(var k = 0; k < listeIdAdresses.length; k++) 
                 { 
                  (function (l) { 
                   _db.transaction(function (tx2) { 
                    idAdresses = listeIdAdresses[l].split('@@'); 
                    tx2.executeSql("UPDATE Adresses SET isExport = 1, idClient = ?, id = ? WHERE idClient = ? and id = ? ", [infosClient.id, idAdresses[1], infosClient.ancienId, idAdresses[0]], function (tx2, res2) { 
                     tx2.executeSql("UPDATE Visites SET idClient = ?, idAdresse = ? WHERE idClient = ? and idAdresse = ? ", [infosClient.id, idAdresses[1], infosClient.ancienId, idAdresses[0]], function (tx2, res2) { 
                      nbAdresseDejaTransferee++; 
                      if(nbClientDejaTransferer == nbClientATransfere && nbAdresseDejaTransferee == idAdresses.length) 
                      { 
                       nbListeAdressesDejaTransferee++; 
                       nbAdresseDejaTransferee = 0; 
                       if (nbListeAdressesDejaTransferee == listeIdAdresses.length) 
                       { 
                        nbListeAdressesDejaTransferee = 0; 
                        _isExport = 1; 
                        callback(); 
                       } 
                      } 
                     }); 
                    }); 
                   }); 
                  })(k); 
                 } 
                } 
                else 
                { 
                 tx.executeSql("UPDATE Adresses SET isExport = 1, idClient = ? WHERE idClient = ? ", [infosClient.id, infosClient.ancienId], function (tx, res) { 
                  tx.executeSql("UPDATE Visites SET idClient = ? WHERE idClient = ? ", [infosClient.id, infosClient.ancienId], function (tx, res) { 
                   if(nbClientDejaTransferer == nbClientATransfere) 
                   { 
                    _isExport = 1; 
                    callback(); 
                   } 
                  }); 
                 }); 
                } 
               }); 
              }); 
             }); 
            } 
           }); 
          } 
          else 
          { 
           //On passe à la mise à jour suivante 
           callback(); 
          } 
         })(i); 
        } 
       } 
      }); 
     }); 
    } 
    else 
    { 
     _isExport = 0; 
     callback(); 
    } 
} 

回答

0

沒關係。中庸之道替換第二個「for循環」本:

$(listeIdAdresses).each(function(index, idAdresses){ 
    tx.executeSql("UPDATE Adresses SET isExport = 1, idClient = ?, id = ? WHERE idClient = ? and id = ? ", [infosClient.id, idAdresses.split('@@')[1], infosClient.ancienId, idAdresses.split('@@')[0]], function (tx, res) { 
     tx.executeSql("UPDATE Visites SET idClient = ?, idAdresse = ? WHERE idClient = ? and idAdresse = ? ", [infosClient.id, idAdresses.split('@@')[1], infosClient.ancienId, idAdresses.split('@@')[0]], function (tx, res) { 
      nbAdresseDejaTransferee++; 
      if (nbAdresseDejaTransferee == idAdresses.split('@@').length) 
      { 
       nbAdresseDejaTransferee = 0; 
       nbListeAdressesDejaTransferee++; 
       if(nbClientDejaTransferer == nbClientATransfere) 
       { 
        if (nbListeAdressesDejaTransferee == listeIdAdresses.length) 
        { 
         nbListeAdressesDejaTransferee = 0; 
         _isExport = 1; 
         callback(); 
        } 
       } 
      } 
     }); 
    }); 
});