Bonjour, sur une nodemcu esp8266 j'affiche des données reçu en XML envoyé vers ma page web.
Je cherche a les afficher dans les cases de mon Form, cela ne marche pas.
Si je les affichent dans un tableaux ça marche.
Je poste juste les partient du code , pas le tout pour être plus claire.
Il y a plusieurs variables pour toutes c'est de même.
HTML:
<body onload="obtenirVariables()">
// dans la table ca l'affiche
<table>
<td id="sensor0"></td>
</table>
<form>
// j'aimerais l'afficher dans la case, marche pas
<input id="sensor0" type="text" name="S0max" maxlength="4" size="4">
<input name='BT01' type='submit' value="Send">
</form>
</body>
javascript:
function obtenirVariables(){
var uniqueURL = "/reqEtatVariables" + "?aleatoire=" + Math.trunc(Math.random() * 1000000);
var request = new XMLHttpRequest(); // http://www.toutjavascript.com/reference/ref-xmlhttprequest.php
request.onreadystatechange = function()
{
if (request.readyState == 4) {
if (request.status == 200) {
document.getElementById("sensor0").innerHTML = this.responseXML.getElementsByTagName('sensor0')[0].childNodes[0].nodeValue;
}
}
}
}
Si j'ai bien compris, tu essaie d'afficher du XML a l'interrieur d'une page HTML ???
Et bien, ca ne marchera pas comme ca (si tu veux bien aussi le code XML) car le navigateur va prendre les balises XML comme des balises HTML qu'il ne connait pas.
La solution la plus simple est d'y ajouter un filtre qui remplace tout les '<' et '>' par des '& gt;' et '& lt;' (sans espace après le & mais si je ne le met pas, le forum les transforme).
Maintenant, si le but n'est de transmettre qu'une seule value, pourquoi passer par HTML ? Le plus simple n'est-il pas de n'envoyer que cette valeur sans la formaté ? Ou s'il y en a plusieurs, d'envoyer du CSV si elles sont simple ou du JSON sinon ?
C'est quand meme plus facile a parser et surtout plus léger que le XML
@destroyedlolo - je pense que vous n'avez pas bien lu ce qu'il essaye de faire
il utilise AJAX. Le XML envoyé est décodé par une fonction qui va extraire puis injecter la valeur directement dans le DOM. ça permet de rafraîchir une page web sans la recharger et en envoyant juste une information minimale. (cf mon tuto)
@destroyedlolo les données sont affichées en direct.
Il y a une possibilité d'utiliser le JSON, grâce a un tuto j'avais réussi, dès que j'avais besoin de rajouter des variables, ca ne marchais plus je n'avais pas trouver d'aide pour, j'avais un code qui marche avec du XML je suis retourner vers ce code en rajoutant mes variables.
Je me suis retrouver face a un autre problème c'est d'en afficher dans la case de mon form.
Je reviens a vous après avoir passer sur mon code et passer sur le tuto.
Il me semble que je l'avais déjà consulter puisque les fonctions portent les même nom
La structure est de même, ça m'affiche bien les données envoyer en XML avec les balises:
<ins id="sensor0"></ins>
ou
<p id="sensor0"></p>
dans la console je ne reçois aucun message d'erreur, la fenêtre reste blanche.
si je comprend bien ça passe?
Je cherche a afficher mes données dans la case d'un form du genre:
oui c'est ce que j'allais vous dire, vous n'injectez pas du HTML (ce que innerHTML fait et qu'on utilise pour remplacer un span) mais la valeur
mais elle ne conviendra pas, puisque la page se met a jour automatiquement, cela efface les données de la case
Vous voulez dire si l'utilisateur a effectué une modification qui n'a pas encore été soumise ?
éventuellement testez avec document.getElementById("sensor0").defaultValue = ... plutôt que l'attribut value.
J'ai essayé avec document.getElementById("sensor0").defaultValue = ... ça n'affice rien.
sinon je les afficherais avant la case du form et je rajouterais, if else après être soumis, si le contenue est de zéro donc pas de changement de données.
Ce que je voulais , que les données seront prise de façon automatique si l'utilisateur ne les change pas après validation du formulaire, et aussi les afficher, c'est pour cela que je voulais les affichager direct dans les cases.
comme cela pose problème, Je vais procéder d'une autre manière des les afficher sur la même ligne avant le form dans les balises .
comme ja l'ai dis je vais rajouter des conditions après l'envoi du formulaire.
si les données sont connues à l'émission de la page web, vous pouvez les pré-remplir directement, pas besoin de XMLHttpRequest.
si elles sont dynamiques et peuvent évoluer pendant que l'utilisateur regarde la page, quelle est la signification alors d'une modification par l'utilisateur dans le formulaire ? Si l'Arduino me dit que ça vaut 10, je modifie et rentre 15 et entre le moment ou je soumets et c'est arrivé à l'Arduino ça a encore changé et ça vaut 13, qui gagne ?
Le formulaire n'est pas en rapport avec les données dynamique.
Je m'explique.
C'est un system d'arrosage, pour chaque capteurs j'installe un solénoïde qui est géré par les taux min et max d'humidité.
J'ai les données reçu par les capteurs d'humidité qui sont affichées en lecture seule.
J'ai les données de réglages min et max pour chaque solénoïde.
J'ai mis un form pour pouvoir régler ces taux si il faut plus ou moins d'eau.
du genre
if (sensor1 < tauxmin) {ouvre solenoid}
else if (sensor1 > tauxmax) {ferme solenoid}
Si l'utilisateur ne change pas les données après validation le form envoie des '0'.
Je voulais renvoyer les même données si il n'y a pas eu de changement après l'envoie, c'est pour cela que je voulais afficher les données direct dans les cases, puisqu'elles changent qua l'intervention de l'utilisateur.
J'ai remarquer que ca ne marche pas comme je le voulais, puisque la page se rafraîchit
toute seul.
Je me suis dis que le plus simple de le faire après l'envoie est de rajouter des conditions .
donc chaque ligne du tableau contient une form dans la dernière colonne ?
Si le programme ne modifie pas les seuils de taux (on ne dit pas Rate mais threshold) ceux qui sont en mémoire pourraient être envoyés une seule fois lors de l'affichage de la page. Le refresh automatique par AJAX ne devrait porter que sur la colonne Humidity. Il ne devrait pas y avoir de conflit
oui 1024 il est dans l'air
les autres ne sont pas encore connecté.
Ahhh...je viens d'y réfléchir le problème devrais être a cause avoir tous mis dans la même fonction javascript.
Il faudra que je les met dans une nouvelle fonction.
Oui vous séparez les mises à jour
Par exemple on page load vous allez chercher toutes les valeurs et ensuite sur minuterie vous allez mettre à jour l’humidité