11528 sujets

JavaScript, DOM et API Web HTML5

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

(message à supprimer
Modifié par PapyJP (08 Dec 2018 - 18:55)
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");
    }
});

Modérateur
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,
Modérateur
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,
Modérateur
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,
Modérateur
PapyJP a écrit :
La réponse n'est pas correcte, il banque une balise autour de "abadenn


Bien vu !

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)
Modérateur
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,
Modérateur
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,
Modérateur
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,
Modérateur
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)
Pages :