Erreur .each avec jquery
Résolu/Fermé
ephelya
Messages postés
282
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
20 juin 2023
-
24 janv. 2017 à 17:58
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 - 30 janv. 2017 à 17:14
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 - 30 janv. 2017 à 17:14
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
- Erreur 1001 outlook - Accueil - Bureautique
- Erreur 5000 france tv - Forum iPhone
- Erreur de lecture reconnecté en 3s - Forum TV & Vidéo
9 réponses
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 717
24 janv. 2017 à 19:08
24 janv. 2017 à 19:08
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
ephelya
Messages postés
282
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
20 juin 2023
2
26 janv. 2017 à 15:14
26 janv. 2017 à 15:14
Ca me donne une erreur "json is not defined"...
ephelya
Messages postés
282
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
20 juin 2023
2
26 janv. 2017 à 15:31
26 janv. 2017 à 15:31
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"
ephelya
Messages postés
282
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
20 juin 2023
2
26 janv. 2017 à 15:34
26 janv. 2017 à 15:34
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"}]
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 717
Modifié par jordane45 le 26/01/2017 à 18:26
Modifié par jordane45 le 26/01/2017 à 18:26
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); }); }
ephelya
Messages postés
282
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
20 juin 2023
2
>
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
27 janv. 2017 à 06:25
27 janv. 2017 à 06:25
toujours pareil, malheureusement...
tout est encodé en utf, fichier et bdd... et je n'avais pas de problème d'accent au départ sans encoder en json
[{"id":"16862","name":"Bou"},{"id":"16928","name":"Mardi\u00e9"},{"id":"17052","name":"Ch\u00e9cy"}]
TypeError: invalid 'in' operand a
tout est encodé en utf, fichier et bdd... et je n'avais pas de problème d'accent au départ sans encoder en json
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 717
27 janv. 2017 à 10:30
27 janv. 2017 à 10:30
Tu peux me dire ce que contient ta fonction get_villes() ?
ephelya
Messages postés
282
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
20 juin 2023
2
>
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
27 janv. 2017 à 17:30
27 janv. 2017 à 17:30
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);
}
ephelya
Messages postés
282
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
20 juin 2023
2
>
ephelya
Messages postés
282
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
20 juin 2023
27 janv. 2017 à 17:32
27 janv. 2017 à 17:32
je sais que les 3 premières lignes de la fonction ne servent à rien, c'est un reste de copier-coller que je n'ai pas effacé ! ;-)
ce qui m'étonne par contre c'est que je n'avais aucun pb avec cette précédente fonction...
ce qui m'étonne par contre c'est que je n'avais aucun pb avec cette précédente fonction...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
ephelya
Messages postés
282
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
20 juin 2023
2
26 janv. 2017 à 15:43
26 janv. 2017 à 15:43
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
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 717
Modifié par jordane45 le 29/01/2017 à 04:59
Modifié par jordane45 le 29/01/2017 à 04:59
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); } }); }
ephelya
Messages postés
282
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
20 juin 2023
2
29 janv. 2017 à 10:33
29 janv. 2017 à 10:33
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 ! ;-)
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 717
29 janv. 2017 à 12:24
29 janv. 2017 à 12:24
Ah oui.
Cote js... faut tester que reponse n'est pas null
Cote js... faut tester que reponse n'est pas null
ephelya
Messages postés
282
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
20 juin 2023
2
Modifié par ephelya le 29/01/2017 à 11:45
Modifié par ephelya le 29/01/2017 à 11:45
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]
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 717
29 janv. 2017 à 12:26
29 janv. 2017 à 12:26
Fait donc un console.log de réponse (tout seul sans autre texte devant...)
ephelya
Messages postés
282
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
20 juin 2023
2
>
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
30 janv. 2017 à 10:44
30 janv. 2017 à 10:44
Ca donne Array [ Object ]
ephelya
Messages postés
282
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
20 juin 2023
2
29 janv. 2017 à 11:46
29 janv. 2017 à 11:46
et console.log(reponse['ville_code_postal']) affiche undefined
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 717
30 janv. 2017 à 10:59
30 janv. 2017 à 10:59
"reponse" contient un "OBJET" JSON.
Fais un
Inspire toi aussi de ce que je t'ai donné comme code précédement ...
Fais un
console.log(reponse);et regarde ce que ça donne ....
Inspire toi aussi de ce que je t'ai donné comme code précédement ...
$.each(reponse,function(i,ville){ console.log(ville.ville_id + " => " + ville.ville_nom_reel); });
ephelya
Messages postés
282
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
20 juin 2023
2
>
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
Modifié par ephelya le 30/01/2017 à 15:22
Modifié par ephelya le 30/01/2017 à 15:22
au temps pour moi, j'avais mal recopié la fonction, toutes mes excuses... c'est réglé ! :-)
Merci encore pour ton aide !!!
Merci encore pour ton aide !!!
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 717
>
ephelya
Messages postés
282
Date d'inscription
mercredi 28 septembre 2011
Statut
Membre
Dernière intervention
20 juin 2023
30 janv. 2017 à 17:14
30 janv. 2017 à 17:14
N'oublie pas de mettre la discussion en RESOLU
(lien se trouvant sous le titre de ta question)
Bonne soirée.
(lien se trouvant sous le titre de ta question)
Bonne soirée.