Erreur .each avec jquery
Résolu
ephelya
Messages postés
296
Statut
Membre
-
jordane45 Messages postés 30427 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 30427 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 ! :-)
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
-
-
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 :
$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"}]-
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 :<?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
$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...<?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 ! ;-) -
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...
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