Problème AJAX

Par Quentin_Regnier, il y a 4 ans


Bonjour,
Je rencontre un problème avec l'utilisation de AJAX,
J'ai créer une fonction permetant de récupérer du texte dans ma base de données mais lorsque je l'execute je reçoit une erreur :

Erreur d’analyse XML : mal formé Emplacement : http://localhost/includes/modif_initialisation.php?id=26 Numéro de ligne 1, Colonne 12 :

Oui je sais, mais je n'ai rien oublié il n'y a rien après le ( Colonne 12 : ) mais voilà mon problème.
Ce problème engendre aussi d'autre problème comme le fait de ne pas afficher le text dans le textarea dans mon fichier php :

<!-- Version TXT --> <div id="form_pub_txt" style="display:none;"> <form method="POST" class="form_pub_text" enctype="multipart/form-data"> <textarea name="content_publication" placeholder="Qu'avez-vous à raconter" class="text_area_txt" id="textareatext"></textarea><br> <input onclick="" id="submit" name="" value="Publier" class="submit_txt" style="cursor: pointer; margin-top: 25px;"> </form> </div>

voici mon code pour récup le text dans la base de donnée :

<?php include 'database.php'; global $db; if(isset($_GET['id']) AND !empty($_GET['id'])){ if($_GET['id'] >= 1){ $edit_id = htmlspecialchars($_GET['id']); $edit_publication = $db->prepare('SELECT * FROM publications WHERE id = :id'); $edit_publication->execute([ 'id' => $edit_id ]); if($edit_publication->rowCount() ==1) { $edit_publication = $edit_publication->fetch(); } else{ die('Erreur ça n\'existe pas'); } } } ?><?=htmlspecialchars_decode($edit_publication['content'])?>

Et mon JS pour la focntion avec AJAX :

function modif_art(id) { var httpRequest = getHttpRequest() httpRequest.onreadystatechange = function () { var a = httpRequest if (httpRequest.readyState === 2){ debugger hide_edit_panel_reverse(); // affiche un truc de chargement } if (httpRequest.readyState === 4){ debugger document.getElementById('content_text_area').innerHTML = httpRequest.responseText; // retirer le truc de chargement debugger document.getElementById('form_pub_txt').style.display = 'block'; debugger document.getElementById('submit').onclick = function(){modif_proce_art(id);}; } } httpRequest.open('GET', 'includes/modif_initialisation.php?id=' + id, true) httpRequest.send()

Voilà si quelqu'un sait d'où vient le problème je le remercie d'avance
Merci d'avoir tout lu :)

3 réponses

Lartak, il y a 4 ans

Bonjour.
Pour commencer, le mot clé global ne s'utilise qu'à l'intérieur d'une fonction afin de pouvoir accéder à des variables qui n'existent qu'à l'extérieur de celle-ci, sauf que toi tu l'utilises sans même être dans une fonction.
Ensuite, inutile d'utiliser les fonctions isset et empty à la suite l'une de l'autre :

empty — Détermine si une variable est vide
Une variable est considérée comme vide si elle n'existe pas, ou si sa valeur équivaut à false. La fonction empty() ne génère pas d'alerte si la variable n'existe pas.

Par conséquent, tu peux largement remplacer la condition par:

if (!empty($_GET['id']) && $_GET['id'] >= 1) { // ...

Au passage, inutile de fermer la balise php si c'est pour la rouvrir juste après.
Pour terminer, tu ne dois pas utiliser une variable ($edit_publication), en dehors du code dans laquelle elle peut être définie, tu devrais donc plutôt l'utiliser uniquement dans la condition dans laquelle tu utilise la méthode fetch.
Sans oublier que si ton code PHP peut être solicité via une requête ajax, tu devrais plutôt renvoyer un en-tête d'erreur au lieu de faire un die, car côté ajax tu ne pourras pas faire la différence entre un déroulement correct ou non.

Edit: Pour rappel, la méthode rowCount ne doit pas être utilisé pour une requête de type SELECT.
J'oubliais, d'où tu sors un élément HTML qui aurait comme id content_text_area ?
Il n'y en a aucun dans le formulaire que tu présentes.

Quentin_Regnier, il y a 4 ans

Merci beaucoup, piero5679 !

J'ai testé est ça marche enfin !

Mais j'ai toujours des erreurs dans ma console :

Mais je pense savoir d'où vient le problème des 2 erreurs, la 2 ème erreur est surement dû à l'utilisation de :

httpRequest.responseText;

sachant que j'utilise :

httpRequest.responseType = "document";

et donc les deux sont incompatible comme il est très bien expliquer dans la console. Et je pense que la première erreur vient du fait que les données qu'on envoi au

responseText

ne sont pas bonne (mais je suis pas sur)

Donc je redemande quel est l'équivalent mais cette fois pour

responseText

avec le

responseType = "document";

car j'ai essayer de comprendre ce code :

var xhr = new XMLHttpRequest(); xhr.onload = function() { console.log(this.responseXML.title); } xhr.open("GET", "file.html"); xhr.responseType = "document"; // for response type: text/html xhr.send();

mais je ne comprend pas la façon dont il affiche le résutat et surtout le mettre dans un :

document.getElementById("textareatext").value = ;

car si je ne passe pas en html ma réponse les

<br/>

ne sont pas pris en compte même en mettant dans mon php :

<?=htmlspecialchars_decode($edit_publication['content'])?>

AJAX doit surement reformater les données

Merci encore piero5673 et si tu peux répondre à cette question :)

Lartak, il y a 4 ans

Mais, qui est piero5679 ?
Je ne vois qu'une seule personne qui t'aies répondu, c'est moi et mon pseudo est Lartak.