Ajax/PHP problème
Résolu/Fermé
Bonjour,
j'ai programmé un bouton qui lorsqu'il est cliqué, déclenche une requête asynchrone (ajax quoi) vers une page PHP. En fonction de l'état de la session de l'utilisateur (ouverte ou non), je veux que la page PHP réponde différemment, et surtout, si aucune session n'est ouverte, j'aimerais qu'une popup s'ouvre avec dedans le formulaire de login.
Or, si je renvoie par la page PHP un morceau de code type "<script>window.open('login.html');</script>" ca ne fonctionne pas. Je n'arrive pas à savoir si c'est parce que mon navigateur le bloque en tant que popup de pub (puisque c'est pas directement déclenché par un clic...) ou justement si l'absence d'événement déclencheur fait que rien ne se passe. Dans ce cas, quel code javascript dois-je renvoyer pour que la nouvelle fenêtre s'ouvre ?
Merci beaucoup
j'ai programmé un bouton qui lorsqu'il est cliqué, déclenche une requête asynchrone (ajax quoi) vers une page PHP. En fonction de l'état de la session de l'utilisateur (ouverte ou non), je veux que la page PHP réponde différemment, et surtout, si aucune session n'est ouverte, j'aimerais qu'une popup s'ouvre avec dedans le formulaire de login.
Or, si je renvoie par la page PHP un morceau de code type "<script>window.open('login.html');</script>" ca ne fonctionne pas. Je n'arrive pas à savoir si c'est parce que mon navigateur le bloque en tant que popup de pub (puisque c'est pas directement déclenché par un clic...) ou justement si l'absence d'événement déclencheur fait que rien ne se passe. Dans ce cas, quel code javascript dois-je renvoyer pour que la nouvelle fenêtre s'ouvre ?
Merci beaucoup
A voir également:
- Ajax/PHP problème
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Bouton php - Forum PHP
- Php alert ✓ - Forum PHP
- Retour a la ligne php - Forum Webmastering
6 réponses
avion-f16
Messages postés
19252
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
10 février 2025
4 505
20 févr. 2011 à 17:41
20 févr. 2011 à 17:41
Salut.
XmlHttpRequest ne permet pas d'exécuter le code retourné par la cible (le script PHP).
Lorsque la requête est terminé (readyState = 4) et réussie (status = 200), tu peux utiliser responseText pour analyser le résultat, et ainsi effectuer différentes actions.
Par exemple :
XmlHttpRequest ne permet pas d'exécuter le code retourné par la cible (le script PHP).
Lorsque la requête est terminé (readyState = 4) et réussie (status = 200), tu peux utiliser responseText pour analyser le résultat, et ainsi effectuer différentes actions.
Par exemple :
xhr.onreadystatechange = function() { if(xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) { var result = xhr.responseText; if(result == "ok") { alert('Ok'); } else { alert('Vous devez vous identifier !'); window.open('connexion.html'); } } }
avion-f16
Messages postés
19252
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
10 février 2025
4 505
20 févr. 2011 à 22:46
20 févr. 2011 à 22:46
Je viens de tester, et effectivement, ça ne fonctionne pas.
Je te propose, en cas d'erreur (donc si l'utilisateur n'est pas identifié), d'afficher un message d'erreur masqué par défaut (CSS) grâce au Javascript. Ce message contiendra deux bouton : Un pour se connecter, l'autre pour annuler et simplement masquer le message.
Lorsqu'on clique sur le bouton pour se connecter, comme il s'agira d'un onclick, tu pourras ouvrir une pop-up.
Voilà une démonstration :
https://gist.github.com/836344
Je te propose, en cas d'erreur (donc si l'utilisateur n'est pas identifié), d'afficher un message d'erreur masqué par défaut (CSS) grâce au Javascript. Ce message contiendra deux bouton : Un pour se connecter, l'autre pour annuler et simplement masquer le message.
Lorsqu'on clique sur le bouton pour se connecter, comme il s'agira d'un onclick, tu pourras ouvrir une pop-up.
Voilà une démonstration :
https://gist.github.com/836344
ca marche parfaitement ! ca rajoute un clic, donc je vais surement perdre des utilisateurs dans la manip' :p mais c'est très encourageant (en fait je me demande si la solution ne consiste pas à lancer la requête AJAX indépendemment du premier clic, comme ça la réponse est déjà stockée et peut être traitée : si logged = false -> div.onclick = window.open... could work !) merci encore
habile... moi je mettais le script à l'intérieur du responseText, mais effectivement, c'est bien plus malin comme ça ! Merci beaucoup
EDIT : comme le window.open n'est pas déclenché par un onclick() ou autre événement, il est géré comme un pop-up par le navigateur, qui refuse de l'ouvrir :/ des idées pour contourner ça ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
avion-f16
Messages postés
19252
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
10 février 2025
4 505
20 févr. 2011 à 20:07
20 févr. 2011 à 20:07
Normalement tu lances ta requête AJAX depuis un onclick, celui du bouton ?
Si ça ne fonctionne pas alors je ne vois pas comment contourner le problème.
Tu peux toujours utiliser un script de lightbox, c'est à la mode, ça ne pose pas ce genre de soucis et c'est plus esthétique.
https://www.shadowbox-js.com/
http://fancybox.net/
Si ça ne fonctionne pas alors je ne vois pas comment contourner le problème.
Tu peux toujours utiliser un script de lightbox, c'est à la mode, ça ne pose pas ce genre de soucis et c'est plus esthétique.
https://www.shadowbox-js.com/
http://fancybox.net/
oui mais ca fait onclick -> ajax -> popup et non pas onclick -> popup, Chrome le traite comme une pub...
les lightbox ca alourdit quand même vachement, à base de gros javascript (et encore, le nouveau Photo viewer de facebook est fait 96% en CSS... enfin bon, un window.open c'est tellement plus simple :p)
les lightbox ca alourdit quand même vachement, à base de gros javascript (et encore, le nouveau Photo viewer de facebook est fait 96% en CSS... enfin bon, un window.open c'est tellement plus simple :p)