Uncaught TypeError: Cannot use 'in' operator to search for 'length' in
Résolu
Sinistrus
Messages postés
1010
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
6 juin 2023
-
Modifié le 24 sept. 2019 à 00:38
Sinistrus Messages postés 1010 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 -
Sinistrus Messages postés 1010 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 -
A voir également:
- Cannot use 'in' operator to search for '_leaflet_id' in undefined
- Typeerror: cannot use 'in' operator to search for 'pluralization' in undefined - Meilleures réponses
- Typeerror: cannot use 'in' operator to search for 'path' in undefined - Meilleures réponses
- Uncaught mysqli_sql_exception: incorrect integer value: ✓ - Forum MySQL
- Uncaught TypeError: Cannot set property 'disabled' of null ✓ - Forum Javascript
- Uncaught TypeError: Cannot read property 'top' of undefined - Forum Javascript
- Uncaught TypeError: Cannot read property 'style' of null ✓ - Forum Javascript
- Uncaught TypeError: Cannot read property 'style' of null ✓ - Forum Javascript
5 réponses
jordane45
Messages postés
38486
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 août 2025
4 752
Modifié le 24 sept. 2019 à 00:48
Modifié le 24 sept. 2019 à 00:48
Quel est le message d'erreur complet?
Sur quelle ligne de code ?
Que contient ta requête ajax lorsque tu regardes dans la console ?
Que t'affichent tes différents console.log ?
Ton souci vient du php ou du js ?
Sur quelle ligne de code ?
Que contient ta requête ajax lorsque tu regardes dans la console ?
Que t'affichent tes différents console.log ?
Ton souci vient du php ou du js ?
Sinistrus
Messages postés
1010
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
6 juin 2023
17
Modifié le 24 sept. 2019 à 01:45
Modifié le 24 sept. 2019 à 01:45
Voici le message complet :

sur la ligne indiquée de la console.
Dans les consoles, je vois le montant (1182150) exact et correct, mais rien ne s'affiche dans ma div et j’obtiens ce message d'erreur.
D'où vient cette erreur ? Je penses après mes tests que c'est la ligne $result["success"] = $Poids_final;

sur la ligne indiquée de la console.
Dans les consoles, je vois le montant (1182150) exact et correct, mais rien ne s'affiche dans ma div et j’obtiens ce message d'erreur.
D'où vient cette erreur ? Je penses après mes tests que c'est la ligne $result["success"] = $Poids_final;
jordane45
Messages postés
38486
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 août 2025
4 752
24 sept. 2019 à 06:35
24 sept. 2019 à 06:35
Tu essais de faire un each sur une variable qui n'est pas un array... donc.. normal....
Sinistrus
Messages postés
1010
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
6 juin 2023
17
24 sept. 2019 à 13:48
24 sept. 2019 à 13:48
Merci Jordane,
J'ai essayé de mettre la valeur dans un array :
$result["success"] = array("Poids_final" => $Poids_final);
Mais ça ne marche toujours pas... tu peux m'aider d'avantage stp ?
J'ai essayé de mettre la valeur dans un array :
$result["success"] = array("Poids_final" => $Poids_final);
Mais ça ne marche toujours pas... tu peux m'aider d'avantage stp ?
jordane45
Messages postés
38486
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 août 2025
4 752
24 sept. 2019 à 15:15
24 sept. 2019 à 15:15
$.ajax({ type: "POST", url: "_montant_livraison.php", cache: false, data: data, async: true, dataType: "json" }).done(function(reponse) { var erreur = typeof(reponse.Error) != 'undefined' ? reponse.Error : null; var result = typeof(reponse.success) != 'undefined' ? reponse.success : null; if (!erreur) { if (result) { console.log('Resultat', result); var TAX = "" var Poids = ""; var Taux = Number('<?php echo $MNY_Taux; ?>'); var Pays = $("#VAL_Lieu").val(); if(result.length){ $.each(result, function(i, vx) { console.log("each Result",i,vx); Poids += parseFloat(vx.Poids_final); }); $("#RCP_Frais").html("<?php echo ": ".$MNY_Symbole." "; ?>" + Poids); $("#VAL_Transport").val(Poids); } } if (result == null) { var Poids = "0"; $("#RCP_Frais").html("<?php echo ": ".$MNY_Symbole." "; ?>" + Poids); $("#VAL_Transport").val(Poids); } document.getElementById("Montant_Transport").innerHTML = document.getElementById("VAL_Devise").value + " " + document.getElementById("VAL_Transport").value; } else { alert('Erreur AJAX !'); console.log('Erreur', erreur); } }).fail(function(jqXHR, textStatus) { console.log('Ajax error :', jqXHR, textStatus); alert('Erreur AJAX !'); }); }
Sinistrus
Messages postés
1010
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
6 juin 2023
17
24 sept. 2019 à 22:59
24 sept. 2019 à 22:59
Salut Jordane,
Pour une fois tu me donne un code fini sans //explications :D
J'ai fais un copier coller de ton code, il ne m'affiche plus d'erreurs mais ne récupère pas la valeur dans ma div...
Je remarque surtout cette ligne :
Bon j'avoue que je ne comprends pas trop sa place et ce qu'il fait...
Deuxièmement, est-il possible, dans mon cas, de ne pas toucher au code ajax et juste de mettre
$result["success"]
dans un array ?
Pour une fois tu me donne un code fini sans //explications :D
J'ai fais un copier coller de ton code, il ne m'affiche plus d'erreurs mais ne récupère pas la valeur dans ma div...
Je remarque surtout cette ligne :
if(result.length){où lenght me rappel mon code d'erreur...
$.each(result, function(i, vx) {
console.log("each Result",i,vx);
Poids += parseFloat(vx.Poids_final);
});
$("#RCP_Frais").html("<?php echo ": ".$MNY_Symbole." "; ?>" + Poids);
$("#VAL_Transport").val(Poids);
}
Bon j'avoue que je ne comprends pas trop sa place et ce qu'il fait...
Deuxièmement, est-il possible, dans mon cas, de ne pas toucher au code ajax et juste de mettre
$result["success"]
dans un array ?
jordane45
Messages postés
38486
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 août 2025
4 752
24 sept. 2019 à 23:43
24 sept. 2019 à 23:43
J'ai surtout mis des console.log ... jr m'attend à ce que tu nous montres ce que ca t'affiche
Sinistrus
Messages postés
1010
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
6 juin 2023
17
Modifié le 25 sept. 2019 à 00:19
Modifié le 25 sept. 2019 à 00:19
ca affiche dans la console :
Resultat 1234450
c'est tout...
J'ai essayé de garder mon même code initial sans changer l'ajax mais ajouter une table virtuelle qui sauvegardera les données souhaitées, puis de faire un
Dans ce cas précis j'obtiens la même réponse que mon code pour DHL :
Montant : "1234450" pour la poste
Zone3: "9300" pour DHL
J'aurais préféré éviter toute cette gymnastique et récupérer juste
Resultat 1234450
c'est tout...
J'ai essayé de garder mon même code initial sans changer l'ajax mais ajouter une table virtuelle qui sauvegardera les données souhaitées, puis de faire un
$sql = "SELECT Montant FROM tb_shop_prices_laposte_virtuel WHERE Reference = '".$VAL_Handle."' ";afin de récupérer dans un tableau la valeur souhaitée.
try{
$Stat = $pdo->prepare($sql);
$Stat->execute();
$result["success"] = $Stat->fetchAll(PDO::FETCH_ASSOC);
}
Dans ce cas précis j'obtiens la même réponse que mon code pour DHL :

Montant : "1234450" pour la poste
Zone3: "9300" pour DHL
J'aurais préféré éviter toute cette gymnastique et récupérer juste
$result["success"] = $Poids_final;dans ce même principe.
jordane45
Messages postés
38486
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 août 2025
4 752
25 sept. 2019 à 07:10
25 sept. 2019 à 07:10
Attends..
Tu avais marqué juste avant
J'ai essayé de mettre la valeur dans un array :
$result["success"] = array("Poids_final" => $Poids_final);
Mais tu as retiré ton array .... sinon la console nafficherait pas ce que tu me dis.
De plus.. pense bien à vider ton cache lorsque tu modifies du code js.
Tu avais marqué juste avant
J'ai essayé de mettre la valeur dans un array :
$result["success"] = array("Poids_final" => $Poids_final);
Mais tu as retiré ton array .... sinon la console nafficherait pas ce que tu me dis.
De plus.. pense bien à vider ton cache lorsque tu modifies du code js.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Sinistrus
Messages postés
1010
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
6 juin 2023
17
25 sept. 2019 à 10:49
25 sept. 2019 à 10:49
Bonjour Jordane,
J'ai contourné le problème en conservant mon même code ajax et php.
J'avais compris que mon problème vient du fait que la valeur récupérée n'était pas un tableau...
Je me suis donc inspiré de ma première condition (celle de DHL) et j'ai donc créé une table virtuelle qui recevra les données (de la poste) dans un tableau.
Je m'explique:
L'objectif, étant de mettre une valeur ($result["success"] = $Poids_final;) dans un tableau, j'ai fais ceci:
Tu me diras que c'est archaique, je sais, mais c'est la seule solution que j'ai pu trouver pour transformer ma valeur en tableau et de pouvoir la récupérer comme le montre l'image de mon poste précédent.
Je précise que la partie de DHL utilise aussi une requête pour afficher le résultat... si je devais modifier l'ajax, je me perdrais étant donné que je ne maîtrise pas ce language.
Au final, voici mon code complet, je ne sais pas si tu peux me conseiller/recommander d'avantage :
AJAX:
PHP:
J'ai contourné le problème en conservant mon même code ajax et php.
J'avais compris que mon problème vient du fait que la valeur récupérée n'était pas un tableau...
Je me suis donc inspiré de ma première condition (celle de DHL) et j'ai donc créé une table virtuelle qui recevra les données (de la poste) dans un tableau.
Je m'explique:
L'objectif, étant de mettre une valeur ($result["success"] = $Poids_final;) dans un tableau, j'ai fais ceci:
try { $AD = $pdo - > prepare("INSERT INTO tb_shop_prices_laposte_virtuel (Zone, Montant, NIC_Handle) VALUES (:VAL_Zone, :Poids_final, :VAL_Handle)"); $AD - > execute(array( "VAL_Zone" => $VAL_Zone, "Poids_final" => $Poids_final, "VAL_Handle" => $VAL_Handle )); $sql = "SELECT Montant FROM tb_shop_prices_laposte_virtuel WHERE NIC_Handle = '".$VAL_Handle. "' "; //Récupère le montant total a afficher $Stat = $pdo - > prepare($sql); $Stat - > execute(); $result["success"] = $Stat - > fetchAll(PDO::FETCH_ASSOC); //$result["success"] = $Poids_final; $SUP = $pdo - > exec("DELETE FROM tb_shop_prices_laposte_virtuel WHERE NIC_Handle='".$VAL_Handle. "' "); } catch (PDOException $e) { echo "<div class='alert alert-warning'>".$e - > getMessage(). "</div>"; die(); }
Tu me diras que c'est archaique, je sais, mais c'est la seule solution que j'ai pu trouver pour transformer ma valeur en tableau et de pouvoir la récupérer comme le montre l'image de mon poste précédent.
Je précise que la partie de DHL utilise aussi une requête pour afficher le résultat... si je devais modifier l'ajax, je me perdrais étant donné que je ne maîtrise pas ce language.
Au final, voici mon code complet, je ne sais pas si tu peux me conseiller/recommander d'avantage :
AJAX:
function Montant_Livraison() { var VAL_Poids = $('#VAL_Poids').val(); var VAL_Livraison = $('#VAL_Livraison').val(); var VAL_Zone = $('#VAL_Zone').val(); var VAL_Lieu = $('#VAL_Lieu').val(); var VAL_Handle = "<?php echo $_SESSION_NICHANDLE; ?>"; var VAL_Table; switch (VAL_Livraison) { case "SIVOP": VAL_Table = null; break; case "EXPRESS": VAL_Table = "tb_shop_prices_laposte"; break; case "LA POSTE": VAL_Table = "tb_shop_prices_laposte"; break; case "DHL": VAL_Table = "tb_shop_prices_dhl"; break; default: VAL_Table = null; break; } var data = { VAL_Poids: VAL_Poids, VAL_Livraison: VAL_Livraison, VAL_Table: VAL_Table, VAL_Zone: VAL_Zone, VAL_Lieu: VAL_Lieu, VAL_Handle: VAL_Handle }; $.ajax({ type: "POST", url: "_montant_livraison.php", cache: false, data: data, async: true, dataType: "json" }) .done(function(reponse) { var erreur = typeof(reponse.Error) != 'undefined' ? reponse.Error : null; var result = typeof(reponse.success) != 'undefined' ? reponse.success : null; if (!erreur) { if (result != null) { console.log('Resultat', result); var TAX = "" var Poids = ""; $.each(result, function(i, vx) { $.each(vx, function(colonne, valeur) { var Taux = Number( < ? php echo $MNY_Taux; ? > ); var Pays = document.getElementById("VAL_Lieu").value; }); }); $("#RCP_Frais").html("<?php echo ": ".$MNY_Symbole." "; ?>" + Poids); $("#VAL_Transport").val(Poids); } // ajouté pour le cas de SIVOP if (result == null) { var Poids = "0"; $("#RCP_Frais").html("<?php echo ": ".$MNY_Symbole." "; ?>" + Poids); $("#VAL_Transport").val(Poids); } var transp = document.getElementById("VAL_Transport").value; var devise = document.getElementById("VAL_Devise").value; $("#Montant_Transport").html(devise + " " + transp); } else { alert('Erreur AJAX !'); console.log('Erreur', erreur); } }) .fail(function(jqXHR, textStatus) { console.log('Ajax error :', jqXHR, textStatus); alert('Erreur AJAX !'); }); }
PHP:
$VAL_Table = !empty($_POST["VAL_Table"]) ? $_POST["VAL_Table"] : NULL; $VAL_Poids = !empty($_POST["VAL_Poids"]) ? $_POST["VAL_Poids"] : NULL; $VAL_Livraison = !empty($_POST['VAL_Livraison']) ? $_POST['VAL_Livraison'] : NULL; $VAL_Zone = !empty($_POST["VAL_Zone"]) ? $_POST["VAL_Zone"] : NULL; $VAL_Lieu = !empty($_POST["VAL_Lieu"]) ? $_POST["VAL_Lieu"] : NULL; $VAL_Handle = !empty($_POST["VAL_Handle"]) ? $_POST["VAL_Handle"] : NULL; $result = array(); if ($VAL_Table == "tb_shop_prices_dhl") { $sql = "SELECT $VAL_Zone FROM $VAL_Table WHERE $VAL_Poids BETWEEN Poids_min AND Poids_max"; try { $Stat = $pdo - > prepare($sql); $Stat - > execute(); $result["success"] = $Stat - > fetchAll(PDO::FETCH_ASSOC); } catch (PDOException $e) { $result["Error"] = "<div class='alert alert-danger'>".$e - > getMessage(). "</div>"; } } if ($VAL_Table == "tb_shop_prices_laposte") { [...] //$result["success"] = $Poids_final; try { $AD = $pdo - > prepare("INSERT INTO tb_shop_prices_laposte_virtuel (Zone, Montant, NIC_Handle) VALUES (:VAL_Zone, :Poids_final, :VAL_Handle)"); $AD - > execute(array( "VAL_Zone" => $VAL_Zone, "Poids_final" => $Poids_final, "VAL_Handle" => $VAL_Handle )); $sql = "SELECT Montant FROM tb_shop_prices_laposte_virtuel WHERE NIC_Handle = '".$VAL_Handle. "' "; $Stat = $pdo - > prepare($sql); $Stat - > execute(); $result["success"] = $Stat - > fetchAll(PDO::FETCH_ASSOC); $SUP = $pdo - > exec("DELETE FROM tb_shop_prices_laposte_virtuel WHERE NIC_Handle='".$VAL_Handle. "' "); } catch (PDOException $e) { echo "<div class='alert alert-warning'>".$e - > getMessage(). "</div>"; die(); } } echo json_encode($result); exit();