Erreur .each avec jquery
Résolu
ephelya
Messages postés
282
Date d'inscription
Statut
Membre
Dernière intervention
-
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Je n'arrive pas à exploiter les données récupérées par mon script ajax avec jquery, et je ne comprends absolument pas d'où vient le problème, une fois de plus...
Voici mon script
console.log(villes); donne
mais j'ai ensuite ce message d'erreur: invalid 'in' operand a, donc pas moyen de récupérer les données... pourquoi ??
Merci d'avance pour votre aide ! :-)
Je n'arrive pas à exploiter les données récupérées par mon script ajax avec jquery, et je ne comprends absolument pas d'où vient le problème, une fois de plus...
Voici mon script
$.ajax({
type: "POST",
url: "<?php echo DIR_JS; ?>SCRIPTS/getvilles.php", //Relative or absolute path to response.php file
data: {cpost: cpost},
success: function(villes){
console.log(villes);
$.each(villes, function(id, name ) {
console.log(id+" "+name);
});
}
});
console.log(villes); donne
Array
(
[13128] => Tressan
[13178] => Vendémian
[13425] => Le Pouget
)
mais j'ai ensuite ce message d'erreur: invalid 'in' operand a, donc pas moyen de récupérer les données... pourquoi ??
Merci d'avance pour votre aide ! :-)
A voir également:
- Erreur .each avec jquery
- Erreur 0x80070643 - Accueil - Windows
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- J'aime par erreur facebook notification - Forum Facebook
- Code erreur f3500-31 ✓ - Forum Bbox Bouygues
- Java code erreur 1603 ✓ - Forum Windows
9 réponses
Bonjour
Encode le resultat en json dans ton fichier php
Et dans l'appel à l'ajax (côté js) ajoute le dqtatype:json
Encode le resultat en json dans ton fichier php
Et dans l'appel à l'ajax (côté js) ajoute le dqtatype:json
ok, j'ai rajouté les guillemets à "json" et je n'ai plus cette erreur, mais j'ai toujours " invalid 'in' operand a"...
Voici mon code php :
et le js :
La console affiche
[{"id":"16907","name":"Chanteau"},{"id":"16988","name":"Semoy"},{"id":"17018","name":"Fleury-les-Aubrais"}]
puis "TypeError: invalid 'in' operand a"
Voici mon code php :
$villes = get_villes($cpost);
//print_r($villes);
header('Content-Type: text/plain; charset=utf-8');
$json = new \JSON();
$villes = $json->encode($villes, false);
die($villes);
et le js :
$.ajax({
type: "POST",
datatype:"json",
url: "<?php echo DIR_JS; ?>SCRIPTS/getvilles.php", //Relative or absolute path to response.php file
data: {cpost: cpost},
success: function(villes){
console.log(villes);
$.each(villes, function(id, name ) {
console.log(id+" "+name);
});
}
});
La console affiche
[{"id":"16907","name":"Chanteau"},{"id":"16988","name":"Semoy"},{"id":"17018","name":"Fleury-les-Aubrais"}]
puis "TypeError: invalid 'in' operand a"
en prime ça crée un pb de charset qu'il n'y avait pas avant :
[{"id":"16862","name":"Bou"},{"id":"16928","name":"Mardi\u00e9"},{"id":"17052","name":"Ch\u00e9cy"}]
[{"id":"16862","name":"Bou"},{"id":"16928","name":"Mardi\u00e9"},{"id":"17052","name":"Ch\u00e9cy"}]
Le code html de la page qui reçoit les données ajax .... il est déclaré en UTF8 ?
Et les fichiers .. sont ils tous bien en UTF8-SANS BOM ?
=> Voir ici : https://forums.commentcamarche.net/forum/affich-37584944-php-html-caracteres-accentues-et-l-utf8
Côté php .. je ferais simplement :
Côté Jquery, peux tu testé ça dans ton "SUCCESS" ?
Et les fichiers .. sont ils tous bien en UTF8-SANS BOM ?
=> Voir ici : https://forums.commentcamarche.net/forum/affich-37584944-php-html-caracteres-accentues-et-l-utf8
Côté php .. je ferais simplement :
<?php header('Content-Type: application/json ; charset=utf-8'); //pas nécéssaire si tes fichiers sont encodé en utf8 sans bom normalelent.... $villes = get_villes($cpost); echo json_encode($villes);
Côté Jquery, peux tu testé ça dans ton "SUCCESS" ?
success: function(villes){ console.log(villes); $.each(villes, function(datas) { console.log(datas); console.log(datas.id+" "+datas.name); }); }
function get_villes($cpost)
{
//$iduser = $_SESSION['user_id'];
$iduser = 1;
$sexe = "f";
try{
$db = new \PDO('mysql:host='.DB_HOST.'; dbname='.DB_NAME.'; charset=utf8', DB_USER, DB_PASSWORD);
$db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
$db->setAttribute(\PDO::ATTR_DEFAULT_FETCH_MODE, \PDO::FETCH_OBJ);
} catch(PDOException $e) {
die('Erreur : ' . $e->getMessage());
}
$query = "SELECT ville_id, ville_nom_reel FROM villes_france_free WHERE ville_code_postal LIKE '$cpost%'";
//echo $query;
$datas = array(':valeur1'=>$cpost);
try{
$requete = $db -> prepare($query) ;
$requete->execute($datas) ;
}catch(Exception $e){
// en cas d'erreur :
echo " Erreur ! ".$e->getMessage();
echo " Les datas : " ;
//print_r($datas);
}
$result = $requete->fetchAll(); //print_r($result);
$villes= array();
$i=0;
foreach ($result as $ville)
{
$villes[]=array(
"id" =>$ville -> ville_id,
"name" => $ville -> ville_nom_reel
);
$i++;
}
return($villes);
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
J'ai testé aussi ça
Mais j'ai toujours la même erreur
$villes = get_villes($cpost);
json_encode($villes);
print_r($villes);
Mais j'ai toujours la même erreur
Bonsoir,
Déjà.. tu peux commencer par faire un FETCH_ASSOC au lieu d'un FETCH_OBJ
Ce qui rendrait tes lignes de code de ta boucle inutile...
Côté JS .. je ne sais pas pourquoi ... mais c'est la variable "villes" que ton script n'aime pas...
Je l'ai renomé en "reponse" .. et ça marche bien.
Déjà.. tu peux commencer par faire un FETCH_ASSOC au lieu d'un FETCH_OBJ
Ce qui rendrait tes lignes de code de ta boucle inutile...
<?php /** * Fonction de connexion à la BDD */ function connexion_bdd(){ try{ $db = new PDO('mysql:host='.DB_HOST.'; dbname='.DB_NAME.'; charset=utf8', DB_USER, DB_PASSWORD); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); } return $db; } function get_villes($cpost) { //connexion à la BDD $db = connexion_bdd(); $query = "SELECT ville_id, ville_nom_reel FROM villes_france_free WHERE ville_code_postal LIKE '$cpost%'"; //echo $query; $datas = array(':valeur1'=>$cpost); try{ $requete = $db->prepare($query) ; $requete->execute($datas) ; $result = $requete->fetchAll(); //print_r($result); }catch(Exception $e){ // en cas d'erreur : echo "<br>Erreur dans la requete : ".$query . " !<br> ".$e->getMessage(); echo "<br>Les datas : <br>" ; print_r($datas); } return !empty($result) ? $result : NULL; }
Côté JS .. je ne sais pas pourquoi ... mais c'est la variable "villes" que ton script n'aime pas...
Je l'ai renomé en "reponse" .. et ça marche bien.
$.ajax({ type: "POST", dataType: 'json', url: "<?php echo DIR_JS; ?>SCRIPTS/getvilles.php", //Relative or absolute path to response.php file data: {cpost: cpost}, success: function(reponse){ $.each(reponse,function(i,ville){ console.log(ville.ville_id + " => " + ville.ville_nom_reel); }); } ,error : function(x,err){ alert(err); } }); }
Yes ! Ca fonctionne ! Merci beaucoup :-)
Toutefois ça ne marche que si je mets return($result) et non return !empty($result) ? $result : NULL; et je déteste ne pas comprendre d'où viennent les erreurs... Mais l'essentiel c'est que ça fonctionne ! ;-)
Toutefois ça ne marche que si je mets return($result) et non return !empty($result) ? $result : NULL; et je déteste ne pas comprendre d'où viennent les erreurs... Mais l'essentiel c'est que ça fonctionne ! ;-)
Bon, j'ai quand même un problème : en utilisant exactement les mêmes scripts pour la fonction get_cp() pour remplir le champ code postal quand on choisit une ville dans le select (alimenté par la fonction précédente), ça ne fonctionne pas...
voici la réponse dans la console, alors que la fonction sql sort bel et bien un résultat...
function get_cp($idville) {
//connexion à la BDD
$db = connexion_bdd();
$query = "SELECT ville_code_postal FROM villes_france_free v
WHERE ville_id =$ville";
$datas = array();
try{
$requete = $db->prepare($query) ;
$requete->execute($datas) ;
$result = $requete->fetchAll();
}catch(Exception $e){
// en cas d'erreur :
echo "<br>Erreur dans la requete : ".$query . " !<br> ".$e->getMessage();
echo "<br>Les datas : <br>" ;
print_r($datas);
}
//return !empty($result) ? $result : NULL;
return ($result);
}
$cpostal = get_cp($idville);
header('Content-Type: application/json');
echo json_encode($cpostal);
$.ajax({
type: "POST",
dataType: 'json',
url: "<?php echo DIR_JS; ?>SCRIPTS/getcp.php", //Relative or absolute path to response.php file
data: {ville: ville},
success: function(reponse){
console.log("cp "+reponse);
$(cpost).val=reponse;
},
error : function(x,err){
alert(err);
}
});
voici la réponse dans la console, alors que la fonction sql sort bel et bien un résultat...
ville 17026
check ville 17026
cp [object Object]
et console.log(reponse['ville_code_postal']) affiche undefined