循环jQuery中的多个executeSql

Multiples executeSql in for loop jQuery

本文关键字:executeSql jQuery 循环      更新时间:2023-09-26

我在第二个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();
    }
}

没关系。只需将第二个"for loop"替换为:

$(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();
                    }
                }
            }
        });
    });
});