XMLHttpRequest - Message en cas de déconnexion !!

Eléphant du PHP | 80 Messages

16 mars 2023, 13:36

Bonjour,
J'utilise le code ci-dessous afin de faire une mise à jour d'une information (dans un input par exemple) avec Onblur (entre autre)
Comme je me sers aussi d'un theme boostrap, j'ai un message qui apparait lorsque la connexion se fait ("blackDashboard.showSidebarMessage") ! Dans l'état actuel, tout fonctionne nickel lorsque la connexion internet est bien là ! La sauvegarde se fait, et le message apparait.

Toutefois, lorsque la connexion est coupée, le message n'apparait plus. C'est déjà un indice, mais l'utilisateur peut ne pas comprendre ou remarquer que le popup (discret tout de même) n'est pas apparu et donc, en toute bonne foi, penser que ca a été sauvegardé.

Donc, je n'arrive pas à comprendre comment faire aussi apparaître un message lorsque la connexion est coupée et donc que la mise à jour n'a pas pu être faite. Pourriez-vous m'aider ?

En vous remerciant, Stéphane

Code : Tout sélectionner

function maj_info(nom,valeur){ const xhr = new XMLHttpRequest(); const method = "POST"; const url = "./gestion/maj_info_ajax.php"; xhr.open(method, url, false); xhr.onreadystatechange = () => { if (xhr.readyState === XMLHttpRequest.DONE) { const status = xhr.status; if (status === 0 || (status >= 200 && status < 400)) { // The request has been completed successfully blackDashboard.showSidebarMessage('Mise à jour effectuée !!'); } else { // Oh no! There has been an error with the request! blackDashboard.showSidebarMessage('Oups, Sauvegarde impossible ! Toujours connecté1 ?'); } } }; xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); xhr.send("nom=" + nom + "&valeur=" + valeur); }

Avatar du membre
Mammouth du PHP | 1609 Messages

16 mars 2023, 14:22

Salut, il y a d'autres évènements que le readystatechange. Il y a aussi des événements error, abort, timeout.
Essaie de voir quel évènement est déclenché dans ton cas particulier afin de mettre la popup d'erreur adéquate.
Peut être simplement un else du if (xhr.readyState === XMLHttpRequest.DONE) { ?
https://developer.mozilla.org/en-US/doc ... est#events
Développeur web depuis + de 20 ans

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

28 mars 2023, 23:30

La meilleure des solution est effectivement ce que te préconise Saian pour gérer les erreurs et problèmes de connexion.

A noter également l'existence d'une fonction JS qui fonctionne partout sauf sur Firefox : https://developer.mozilla.org/fr/docs/W ... mation_API
Quand tout le reste a échoué, lisez le mode d'emploi...