Ajax/PHP problème

Résolu/Fermé
Yoda - 20 févr. 2011 à 17:24
 Yoda - 20 févr. 2011 à 23:16
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

A voir également:

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
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 :
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');
        }
    }
}
1
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
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
1
je vais étudier ton code, quoiqu'il en soit merci beaucoup pour ton temps et tes conseils !
0
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
0
habile... moi je mettais le script à l'intérieur du responseText, mais effectivement, c'est bien plus malin comme ça ! Merci beaucoup
0
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 ?
0

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
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/
0
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)
0