Problème AJAX / jQuery

D'abord bonjour à tous !
Ensuite, je rencontre un problème avec de l'ajax en jQuery, comme le nom de la box l'indique.

En gros j'ai un fichier .php qui fais une requete dans ma base de données, avec un paramètre que je passe en jQuery.
Jusque la tout va bien , la requête fonctionne, ensuite je fais un json_encode en php, ca le transforme bien comme il faut.

Seulement je n'arrives pas à récupérer les données du JSON en jQuery, tout simplement parce que je ne comprends pas le code.
Je ne comprends pas comment on est censé "sélectionner" le JSON, puis une partie des infos présente dedans.
Et je ne comprends pas non plus la boucle for du prof que j'ai copier collée (cf le commentaire en MAJ).

Je ne sais pas quoi dire d'autre, voila le code :

$.getJSON('requestMaga.php',
'filtre=' + filtre,
function(reponse)
{
// Vire un éventuel contenu de result
$('#result').empty();

// COMPRENDS PAS OMG LOL ?
for(var li in reponse)
{
$('#result').append('<span>' + reponse[li].nomFrP + '</span><br />');
}
$('#result span').click(function()
{
alert( $(this).html() );
});
} //fin function(reponse)
);

Poster un commentaire
daftdef
daftdef
9 ans

Les données de retour de ton script php sont dans la variable "reponse".
Tu as bien fait un echo du json effectué par ton php dans ton script php ?

No_Offense

@daftdef: Oui j'ai bien fait un écho et il renvoie bien les données correctement.
Je comprends pas du tout le " (var li in reponse) " on déclare une variable li ok, mais il ne lui attribues pas de valeur, donc je ne vois pas à quoi ca correspond ? un index du JSON ?

daftdef
daftdef
9 ans

@No_Offense: si tu vais un console.log(reponse); dans ton code (genre juste au-dessus du for) et que tu ouvres ta console (F12) ça t'affiche quoi dedans ? Tu retrouves les données que tu attends ?

daftdef
daftdef
9 ans

@No_Offense: ah non ça c'est la syntaxe de la boucle for. A priori dans "reponse" tu dois avoir un tableau. for (var li in reponse) veut dire : j'initialise une variable li (mais le nom importe peu) qui à chaque tour de boucle prend la valeur de la clef du tableau. Ainsi dans le code, reponse[li] retourne le premier élément du tableau et ainsi de suite. La partie reponse[li].nomFrP me laisse penser que ton JSON doit retourner un truc du genre {'elem1':{'nomFrP':'XXX'},'elem2':{'nomFrP':'YYY'},'elem3':{'nomFrP':'ZZZ'}}
Dans ce cas, dans l'itération de ton for, li vaut elem1, elem2, elem3 et quand tu fais un reponse[li] tu accèdes donc à l'objet {'nomFrP':'XXX'}. Du coup quand tu fais reponse[li].nomFrP ça te donne comme résultat : XXX, YYY ou ZZZ

No_Offense

@daftdef: Je vais essayer tout ça de ce pas, merci :)
A priori la console reste vide.... :(

No_Offense

@daftdef: Je dois avoir un souci de syntaxe quelque part, si je fais un alert(filtre) il ne fais rien du tout -__'.

En tous cas merci beaucoup pour les explications sur la boucle et le JSON, c'est beaucoup plus clair dans ma tête maintenant

daftdef
daftdef
9 ans

@No_Offense: si la console reste vide (ou affiche un undefined) c'est que ton script php n'envoie pas de réponse (ou une erreur ). Si t'as rien, c'est que tu rentres même pas dans la fonction de retour et que tu as un problème avec l'appel vers ton script php . Dans la console, quand tu regardes dans l'onglet réseau, tu vois passer un appel vers la page requestMaga.php ? D'ailleurs c'est censé l'appeler comment cette page ? Au chargement de la page ou quand tu cliques quelque part ? Autre chose, fais un bête alert('ok'); au-dessus de ton getJson pour t'assurer que ton JS est correctement appelé ;)

No_Offense

@daftdef: Tout mon JS se trouve dans la page juste après une balise script qui inclut jQuery, et dans un document.ready
La page requestMaga.php est appéllée ici : " $.getJSON('requestMaga.php', " non ?

Edit : Il y a bien un appel de mon script php dans réseau, et tout est en vert :o (j'en déduis que ça fonctionne, même si je comprends pas grand chose aux notations a coté)

daftdef
daftdef
9 ans

@No_Offense: ok donc tu fais la requête ajax une fois que la page est chargée (en gros, les puristes du JS te diront que le document.ready c'est pas exactement ça, mais on va simplifier ;)
Ce que tu peux faire sur l'appel à ton script php dans la console, tu cliques dessus, et tu cherches un onglet "Réponse" qui devrait te donner la réponse du php. Tu verras donc ce qui est analysé par ton JS derrière.

bito
bito
9 ans

Je sais pas si ca peut t'aider (jsuis pas dev web) mais voilà ce que j'ai déjà fais :
dans mon affichage.php

function RemplissageCalendrier(idProjet){

var xhr = getXMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
var test = JSON.parse(xhr.responseText);

for (var k in test) {

//remplissage calendrier
}
}
};
xhr.open("GET",FichierJson+parametre, true);
xhr.send();
}

Dans mon json :
<?php
include('connect.php');
$dbh3 = $dbh->query(marequete)
echo $bddReponse = json_encode($dbh3->fetchAll(PDO::FETCH_ASSOC));
?>

No_Offense

@bito: Le truc c'est que la dans le cadre du cours on m'oblige a tout faire en JS... en gros le prof va nous fournir des fichiers .php et une base de donnée, et on devra en faire quelque chose ... Donc je m'attends a un fichier php qui se termine par JSON_ENCODE , et à devoir me débrouiller avec.

Pigcell
Pigcell
9 ans

Ainsi les gens qui mette leurs crochets en début de ligne ça existent vraiment :x
Autrement je te conseil d'utiliser https://bpaste.net/ pour nous passer du code. Tu choisis ton langage (pour la coloration) et en date d'expiration tu mets un mois, le temps que la box soit archivé quoi.

Pigcell
Pigcell
9 ans

Dans la doc jquery il parcours les résultats avec un each http://api.jquery.com/jQuery.getJSON/

Autrement essaye de décomposé avec la méthode ajax de jquery http://api.jquery.com/jQuery.ajax/ ainsi tu pourra récupérer le statusCode qui pourra peut être t'en dire plus.

No_Offense

@Pigcell: J'ai trouvé merci, c'était une erreur de sélection de données dans la fonction.
Edit : Oui , je mettais mes crochets avant autrement, et puis un prof m'a demandé de le faire comme ça, j'ai gardé l'habitude depuis.

sainsi
sainsi
9 ans

Finalement tu l'as ta solution ???

No_Offense

@sainsi: Yep ,erreur de mierda (noms) dans la sélection des données du JSON

Cette page est réservée aux ADULTES

Tu es sur le point d'accéder à un site web qui contient du matériel explicite (pornographie).

Tu ne dois accéder à ce site que si tu as au moins 18 ans ou si tu as l'âge légal pour visionner ce type de matériel dans ta juridiction locale, l’âge le plus élevé étant retenu. En outre, tu déclares et garantis que tu ne permettras aucun mineur à d'accéder à ce site ou à ces services.


En accédant à ce site, tu acceptes nos conditions d'utilisation.