Lorsqu'on fait une requête AJAX, il faut savoir déboguer autant du côté client que du côté serveur car les deux entrent en jeu.
Les raisons pouvant causer le problème sont nombreuses. Le problème peut provenir de l'exécution de la fonction JavaScript, de l'appel AJAX en tant que tel, du code serveur, du traitement effectué lorsque l'appel AJAX a été réussi, ...
Et tous nos tests ne seront valides que si on est assuré que la version testée correspond bel et bien à la dernière version écrite. Le piège de la mémoire cache vous guette !
Puisque les navigateurs conservent une copie du code JavaScript en cache, il est important de s'assurer que c'est bien la dernière version écrite qui est exécutée. Voici une technique infaillible pour y parvenir :
Les tests suivants vous permettront de cibler ce qui ne fonctionne pas.
Dans le débogueur JavaScript de Chrome (F12 sous Windows ou ⌘ Cmd+⌥ Option+I sous Mac, onglet ), placez un point d'arrêt sur la première ligne exécutable dans la fonction qui se chargera d'effectuer la requête AJAX. Lancez le site Web et assurez-vous que le code s'arrête sur cette ligne.
Si ce n'est pas le cas, c'est que vous avez fait une erreur.
Une fois qu'on est assuré que l'appel AJAX est exécuté, si le problème persiste, l'étape suivante consiste à vérifier si le code serveur est exécuté. Dans votre environnement de développement (dans l'image qui suit, on a utilisé CodeLobster), placez un point d'arrêt sur la première ligne du code serveur puis lancez le site.
Attention : vous ne pouvez pas faire un affichage à l'écran pour déboguer du code serveur appelé via AJAX. Utilisez plutôt le débogueur ou, si votre IDE ne vous offre pas cette possibilité, effectuez une écriture dans un fichier journal.
Pourquoi n'est-il pas possible d'afficher une valeur à l'écran pour déboguer un appel AJAX ? Simplement parce que tout ce qui sort du code serveur sera envoyé en tant que réponse à l'appel AJAX. Donc, si j'affiche la valeur de $produit_id à l'écran, la variable response dans AJAX contiendra l'identifiant du produit. Ceci causera un problème si l'appel AJAX attend une réponse de type JSON.
En passant, si vous n'avez pas accès à un débogueur, vous devriez songer sérieusement à passer à PhpStorm...
Si le programme n'arrête pas sur le point d'arrêt, c'est qu'il y a une erreur dans l'appel AJAX.
Dans le débogueur JavaScript, placez un point d'arrêt sur la première ligne exécutable du .done() et sur la première ligne exécutable du .fail().
Si le programme s'arrête sur .done(), l'appel AJAX a eu lieu alors le problème se trouve :
À vous de réviser votre code. L'affichage des paramètres response, textStatus et jqXHR pourront vous aider. L'utilisation du débogueur côté client (pour votre code JavaScript dans Chrome) ou côté serveur (pour votre code PHP dans votre IDE) sera d'une grande utilité.
Dans l'exemple suivant, on voit qu'il manquait un point-virgule dans le code serveur.
Si le programme s'arrête sur .fail(), c'est que l'appel AJAX en tant que tel a rencontré un problème.
Parfois, les paramètres textStatus ou errorThrown contiennent un message clair. Dans d'autres cas, c'est jqXHR qui fournira la piste recherchée ou plus précisément jqXHR.responseText.
Il est souvent très aidant d'afficher la valeur de jqXHR.responseText, textStatus et errorThrown dans le débogueur JavaScript.
Dans cet exemple, on voit que le caractère < n'était pas attendu. Puisque notre code avait pour but de retourner du HTML et que le code < fait partie intégrante du HTML, une cause possible serait que le dataType: soit configuré à autre chose que "html".
Le Web est composé d'une série d'échanges entre le client et le serveur. Le client fait une requête au serveur et le serveur retourne une réponse au client. Ces réponses peuvent être explorées afin de déterminer ce qui cause problème.
Dans Chrome, les réponses peuvent être visualisées en appuyant sur F12 puis sur l'onglet Network. Il faut recharger le site Web pour que les réponses apparaissent.
Dans cet exemple, on voit que l'appel au fichier generer-liste-cat.php cause une erreur 404.
Un clic sur le nom du fichier dans cet écran donnera plus de détails. L'exploration des onglets Headers, Preview, Response, etc. peut vous fournir de l'information intéressante.
▼Publicité