10511 sujets

JavaScript, DOM et API Web HTML5

Pages :
(reprise du message précédent)

kristen a écrit :
Bon, je suis au bord de la dépression... Bon, disons que j'ai comme le tournis...

Récapitulons. En codant, suivant les conseils avisés de Parsimonhi :

function handleRequestStateChange() 
{
  if (xmlHttp.readyState == 4) 
    if (xmlHttp.status == 200 || xmlHttp.status == 304) 
    alert(xmlHttp.responseText);
}

function handleServerResponse()
{
  var xmlResponse = xmlHttp.responseXML; 
  xmlRoot = xmlResponse.documentElement;  
  kinnigArray = xmlRoot.getElementsByTagName("kinnig");
  var html = "";  
  for (var i=0; i<kinnigArray.length; i++)
  {html += '<a onclick="onKlik(this.textContent, 0)">' + kinnigArray.item(i).firstChild.data + '</a>';}
  var myDiv = document.getElementById("goulakaat");
  myDiv.innerHTML = html;
}


en tapant abad, j'ai le résultat suivant dans l'alerte de la fonction handleRequestStateChange()

<?xml version="1.0"?><respont><kinnig><abad></kinnig><kinnig<abadenn></kinnig><kinnig><abadennad></kinnig><kinnig>abadenner</kinnig><kinnig>abadiezh</kinnig><kinnig><abadorenn></kinnig></respont>


ce qui est bien le résultat désiré ! mais pour une raison indéterminée, ce qui me paraît être du XML valide et pourtant est refusé comme tel dans handleServerResponse()...


J'ajoute - je ne sais pas si ça peut faire avancer le schmilblick - que si dans la même alerte je remplace xmlHttp.responseText par xmlHttp.responseXML j'ai déjà null comme réponse.
Modifié par kristen (08 Dec 2018 - 18:58)
La réponse n'est pas correcte, il banque une balise autour de "abadenn"

<?xml version="1.0"?>
<respont>
	<kinnig>abad</kinnig>
	<kinnig>abadenn</kinnig>
	<kinnig>abadennad</kinnig>
	<kinnig>abadenner</kinnig>
	<kinnig>abadiezh</kinnig>
	<kinnig>abadorenn</kinnig>
</respont>

En indentant le contenu du XML on trouve plus facilement ce genre de problème.
désolé, c'était juste une erreur de recopie de ma part (je ne peux pas COPYer le contenu de la fenêtre)
désolé, c'était juste une erreur de recopie de ma part (je ne peux pas COPYer le contenu de la fenêtre)
PapyJP a écrit :
La réponse n'est pas correcte, il banque une balise autour de "abadenn" Smiley repuke

&lt;?xml version="1.0"?&gt;
&lt;respont&gt;
	&lt;kinnig&gt;abad&lt;/kinnig&gt;
	&lt;kinnig&gt;abadenn&lt;/kinnig&gt;
	&lt;kinnig&gt;abadennad&lt;/kinnig&gt;
	&lt;kinnig&gt;abadenner&lt;/kinnig&gt;
	&lt;kinnig&gt;abadiezh&lt;/kinnig&gt;
	&lt;kinnig&gt;abadorenn&lt;/kinnig&gt;
&lt;/respont&gt;

En indentant le contenu du XML on trouve plus facilement ce genre de problème.


Bonne journée Kristine, il est essentiel de ne pas déprimer, ce n'est que du code !! Smiley trout Papay Jp est juste à côté dans le sens ou il est essentiel de JavaQuery le code pour être plus robuste, tiens un exampl, après hors de question que je donne un bout de code tout fait!!! C'est à toi de refactoriser!! Smiley fouille Il n?est pas question de faire le travail à ta place!! Smiley hum




With "vanilla" JavaScript:

<script type="text/javascript">
function loadXMLDocJson() {
    var xmlhttp2 = new XMLHttpRequest();

    xmlhttp2.onreadystatechange = function() {
        if (xmlhttp2.readyState == XMLHttpRequest.DONE) {   // XMLHttpRequest.DONE == 4
           if (xmlhttp2.status == 200) {
               document.getElementById("REPLACE_BY_YOUR_DIV").innerHTML = xmlhttp.responseText;
           }
           else if (xmlhttp2.status == 400) {
              alert('There was an error 400');
           }
           else {
               alert('something else other than 200 was returned');
           }
        }
    };

    xmlhttp2.open("GET", "ajax_info_json.txt", true);
    xmlhttp2.send(data);
}
</script>

With jQuery:

$.ajax({
    url: "test.html",
    context: document.body,
    success: function(){
      $(this).addClass("done--is-done");
    }
});

Bonjour,

<?xml version="1.0"?><respont><kinnig>abad</kinnig>abadenn<kinnig>abadennad</kinnig><kinnig>abadenner</kinnig><kinnig>abadiezh</kinnig><kinnig>abadorenn</kinnig></respont>


N'est pas du XML valide !!! car "abadenn" n'est pas entre deux balises <kinnig>...</kinnig>.

<?xml version="1.0"?><respont><kinnig><abad></kinnig><kinnig<abadenn></kinnig><kinnig><abadennad></kinnig><kinnig>abadenner</kinnig><kinnig>abadiezh</kinnig><kinnig><abadorenn></kinnig></respont>


N'est pas du XML valide. Car il y a des < et > un peu n'importe où comme par exemple autour de "abad". De plus, dans "<kinnig<abadenn></kinnig>" , on n'a pas de > après le premier kinnig.

Il faut être précis (il se peut que ces erreurs" soient la conséquence des "copier-coller" et autres manipulations que tu as dû faire pour afficher le XML dans ton message sur le forum).

Modifie le code php comme je te l'ai indiqué pour stocker le XML dans un fichier, et regarde ce qu'il y a dans ce fichier (qui s'appelle "testdata.xml"), et qui devrait se trouver dans le même dossier que le script php ! Poste ici le contenu de "testdata.xml" et vérifie bien caractère par caractère que ce que tu vois sur ta machine dans ce fichier est bien la même chose que ce qui s'affiche dans ton post sur le forum.

Je te mets le code complet :

<?php
header('Content-Type: application/xml ; charset = utf-8');
include ('connect.inc.php');

$dom = new DOMDocument();
$respont = $dom->createElement('respont');
$dom->appendChild($respont);

$name = $_GET['name'];
$kinnigou = mysql_query("SELECT poz FROM ajaks WHERE poz LIKE '".$name."%"."' LIMIT 20");
while ($linenn = mysql_fetch_array($kinnigou))
{
$kinnig = $dom->createElement('kinnig');
$encoded=htmlentities ("$linenn[poz]", ENT_QUOTES, 'ISO-8859-1');
$kinnigText = $dom->createTextNode("$encoded"); 
$kinnig->appendChild($kinnigText);
$respont->appendChild($kinnig);
}

$xmlString = $dom->saveXML();

file_put_contents("testdata.xml", $xmlString);

echo $xmlString;

mysql_close();
?>


Amicalement,
Bonjour,

Il est absolument essentiel qu'on soit sûr que le XML produit par le php soit le bon.

Ça ne sert absolument à rien de modifier le code javascript tant qu'on n'aura pas l'assurance que le XML est correct.

Amicalement,
ertamus24 a écrit :

Bonne journée Kristine, il est essentiel de ne pas déprimer, ce n'est que du code !! Smiley trout Papay Jp est juste à côté dans le sens ou il est essentiel de JavaQuery le code pour être plus robuste, tiens un exampl, après hors de question que je donne un bout de code tout fait!!! C'est à toi de refactoriser!! Smiley fouille Il n?est pas question de faire le travail à ta place!!


Absolument pas d'accord ! JQuery ne sert à rien ici ! Si le XML n'est pas correct, JQuery se ramassera de la même manière que les 2 ou 3 lignes de javascript pur qu'il y a dans le code de kristen et qui doivent fonctionner.

Amicalement,
Bonjour la liste et merci à tous les participants !

Rien de nouveau sur le soleil...
parsimonhi :
J'ai repris exactement ton code php (en modifiant cependant l'ISO-machin en UTF-8). L'alerte - alert(xmlHttp.responseText); - dans la fonction handleRequestStateChange() du javascript me donne bien le code XML attendu. Les erreurs relevées plus haut étaient des fautes de recopie de ma part.
Une remarque - je ne sais pas si c'est important : je n'ai pas trace d'un fichier testdata.xml. Problèmes de droit ? En rapport avec notre problème global ?
Du nouveau !
J'ai eu l'idée de mettre cette proto-version UTF-8 en ligne ici
Taper un a, pour voir. Le message du serveur de free est beaucoup plus volubile que celui de mon serveur local (curieusement, il ne se répète pas aux lettres suivantes).
Je ne comprends pas bien de quoi il est question : d'où sortent ces <br /> ???
9a explique peut-être aussi que je n'aie pas de fichier testdata.xml...
Modifié par kristen (10 Dec 2018 - 13:51)
Bonjour,

kristen a écrit :

J'ai repris exactement ton code php (en modifiant cependant l'ISO-machin en UTF-8). L'alerte - alert(xmlHttp.responseText); - dans la fonction handleRequestStateChange() du javascript me donne bien le code XML attendu. Les erreurs relevées plus haut étaient des fautes de recopie de ma part.
Une remarque - je ne sais pas si c'est important : je n'ai pas trace d'un fichier testdata.xml. Problèmes de droit ? En rapport avec notre problème global ?


C'est bien d'avoir pensé à mettre l'UTF-8 à la place de l'ISO-machin Smiley smile .

Curieux en effet qu'il n'y ait pas ce fichier testdata.xml.

Pour savoir si c'est juste un problème de droit, supprime cette ligne et mets juste après la ligne du header en haut du fichier la ligne suivante :
file_put_contents("testdata.xml", "abc");


Si ça ne crée toujours pas de fichier "testdata.xml", ce sera inquiétant.

Amicalement,
Bonjour,

kristen a écrit :
Du nouveau !
J'ai eu l'idée de mettre cette proto-version UTF-8 en ligne ici
Taper un a, pour voir. Le message du serveur de free est beaucoup plus volubile que celui de mon serveur local (curieusement, il ne se répète pas aux lettres suivantes).
Je ne comprends pas bien de quoi il est question : d'où sortent ces &lt;br /&gt; ???
9a explique peut-être aussi que je n'aie pas de fichier testdata.xml...


Il s'agit d'un message d'erreur php généré par le serveur. Apparement, il voit passer des caractères invalides (selon lui).

Fais un essai en ajoutant juste après la ligne header du haut du fichier les deux lignes suivantes :
mb_internal_encoding("UTF-8");
mb_regex_encoding("UTF-8");

Ça dit à php qu'il faut travailler en UTF-8 "en interne" : certaines fonctions ont besoin de ça pour fonctionner en UTF-8.

Amicalement,
Bonjour,

Il faudrait peut-être aussi ajouter juste après le include en haut de la page un :
mysql_query("SET NAMES 'utf8'");


S'il n'est pas déjà dans le "connect.inc.php" bien entendu !

Amicalement,
Bonsoir,

J'ai rajouté les trois lignes. Je n'ai effectivement plus le message d'erreur précédent... mais ma div reste désespérément vide... (Le fichier en ligne eest aussi modifié)

Amicalement,
Bonjour,

Je vois que sur le serveur de free, dans la fonction function handleRequestStateChange() , tu n'a pas remis l'appel à la fonction handleServerResponse() (il n'y a que l'appel à l'alert() qu'on avait mis en place juste pour tester).

Faudrait le remettre, sinon, ça ne risque pas de marcher !

function handleRequestStateChange() 
{
  if (xmlHttp.readyState == 4) 
    if (xmlHttp.status == 200 || xmlHttp.status == 304) 
    {
      alert(xmlHttp.responseText);
      handleServerResponse();
    }
}


Amicalement,
ca y est ! ça marche ! vous pouvez tester ma (votre !) version flambant-neuve de la page d'accueil en UTF-8 ici. Tapez abati pour vérifier qu'ajax fonctionne (liste déroulante de suggestions) et debriñ pour constater qu'aucun caractère n'est plus bloquant.

C'était couillon et vous avez le droit de me taper sur les doigts. C'est parsimonhi qui - une fois de plus - m'a mis sur la voie : j'ai suivi sa suggestion de rajouter mb_internal_encoding("UTF-8"); et le reste... Demi-miracle : j'avais bien une liste déroulante en local mais rien en ligne... ce qui n'était à priori pas logique. Et là, j'ai réalisé que j'avais effectivement passé tous les fichiers de la base en UTF-8 en local mais pas la base hébergée chez Free... (pas taper !)

Un grand Merci à tous pour votre attention et votre aide !
Kristen
Modifié par kristen (13 Dec 2018 - 17:57)