Uncaught TypeError: Cannot use 'in' operator to search for 'length' in
Résolu
Sinistrus
Messages postés
1010
Date d'inscription
Statut
Membre
Dernière intervention
-
Sinistrus Messages postés 1010 Date d'inscription Statut Membre Dernière intervention -
Sinistrus Messages postés 1010 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
Un code ajax me permet de récupérer selon la zone et le poids, un montant précis.
J'utilise 2 tables, celle de dhl et celle de la poste.
Mon code ajax et la requête pour dhl fonctionne très bien etle résultat est récupéré via ce bout de code :
Quant à la condition de la poste, c'est plusieurs requêtes et le résultat n'est pas tiré de la requête mais d'une valeur $Poids_final que j'appel ainsi :
Seulement à cette étape, j'ai une erreur : Uncaught TypeError: Cannot use 'in' operator to search for 'length' in
Voici mon code ajax complet :
et mon code php sur _montant_livraison.php :
J'ai remarqué que même si je supprime tout le code du contenu de la poste et change la variable $Poids_final en valeur fixe, j'obtiens la même erreur...
Avez-vous une idée ? et merci de votre aide.
Cordialement
Un code ajax me permet de récupérer selon la zone et le poids, un montant précis.
J'utilise 2 tables, celle de dhl et celle de la poste.
Mon code ajax et la requête pour dhl fonctionne très bien etle résultat est récupéré via ce bout de code :
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>";} }
Quant à la condition de la poste, c'est plusieurs requêtes et le résultat n'est pas tiré de la requête mais d'une valeur $Poids_final que j'appel ainsi :
try{ [...] $result["success"] = $Poids_final; }catch(PDOException $e){echo "<div class='alert alert-danger'>".$e->getMessage()."</div>";}
Seulement à cette étape, j'ai une erreur : Uncaught TypeError: Cannot use 'in' operator to search for 'length' in
Voici mon code ajax complet :
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_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_Table:VAL_Table, VAL_Poids:VAL_Poids, VAL_Livraison:VAL_Livraison, VAL_Zone:VAL_Zone, VAL_Lieu:VAL_Lieu}; $.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); } 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 !');}); }
et mon code php sur _montant_livraison.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; $result = array(); if($VAL_Table == "tb_shop_prices_dhl") { [...dhl...] } if($VAL_Table == "tb_shop_prices_laposte") { try{ [...code et conditions if pour la poste...] $result["success"] = $Poids_final; }catch(PDOException $e){echo "<div class='alert alert-danger'>".$e->getMessage()."</div>";} } echo json_encode($result); exit();
J'ai remarqué que même si je supprime tout le code du contenu de la poste et change la variable $Poids_final en valeur fixe, j'obtiens la même erreur...
Avez-vous une idée ? et merci de votre aide.
Cordialement
Configuration: Windows / Chrome 76.0.3809.132
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
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 ?
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;
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 ?
$.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 !'); }); }
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 ?
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.
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
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();