我在第二个for循环中遇到问题: 当l = 0时,第一个tx.executeSql会执行,但在第二个之前,for循环会递增。 然后l = 1,第一个tx.executeSql执行一次,第二次执行第二次,但我的变量idAdresse中包含错误信息。
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 :(得分:0)
没关系。 Juste用这个替换了第二个“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();
}
}
}
});
});
});