2010-09-03 11 views
0

J'espère que vous pouvez aider. Un peu de jQuery/AJAX newb ici.Formulaire de connexion SimpleModal PHP: comment rediriger sur succès/échec

J'ai un formulaire de connexion SimpleModal de base qui peut être appelé depuis la page d'accueil de mon site. Login.js appelle le script login.php qui vérifie ma base de données pour les informations d'identification d'un utilisateur.

Si la connexion est réussie, je définis quelques variables de session et j'utilise généralement la commande header pour envoyer l'utilisateur à sa page personnelle (ou la page d'erreur sur l'échec de connexion).

par ex. header ("Emplacement: restricted/index.php");

Impossible de fermer le formulaire de connexion modale et de rediriger la page d'accueil parent vers la page du membre. Je reste habituellement la place modale vide en disant « Merci »

Si je tente de fermer le formulaire modal avec

success: function (data) { 
$('#login-container .login-loading').fadeOut(200, function() { 
    $('#login-container .login-title').html('Thank you!'); 
    msg.html(data).fadeIn(200); 
    $.modal.close(); //have inserted this line 
}); 
}, 

les modes de transport ferme mais je suis resté sur la page d'accueil. (L'utilisateur est connecté à ce stade mais la redirection n'a pas eu lieu).

Cela fait un jour ou deux que j'ai commencé à regarder autour de moi. J'ai jeté un coup d'œil sur le plugin de connexion wordpress mais je n'en suis pas le plus sage. Des idées?

Répondre

2

En fait, le redirect probablement ne arrivé, il vient de se passer à l'intérieur la demande AJAX. Lorsque vous effectuez une redirection, le XmlHttpRequest que les fonctions ajax utilisent de manière transparente le suit, alors la page qui est revenue au client est la restricted/index.php. ce que j'ai tendance à faire est d'ajouter un en-tête sur qui la page, quelque chose comme ceci:

header("Redirect:restricted/index.php"); 

Ensuite, regardez pour l'en-tête, quelque chose comme ceci en utilisant $.ajaxSetup():

$.ajaxSetup({ 
    complete: function (xhr) { 
    var redirect = xhr.getResponseHeader('Redirect'); 
    if(redirect) window.location.href = redirect; 
    } 
}); 

De cette façon (à moins que vous override complete, il laisse cette option ouverte) lorsqu'une requête qui revient au restricted/index.php (rappelez-vous que XmlHttpRequest s'y est effectivement rendu) obtiendra un en-tête pour informer le client qu'il doit rediriger.

+0

Merci pour la réponse. Oui la redirection se passe en effet dans les coulisses. Nouveau à AJAX - il est difficile de voir ce qui se passe. J'ai maintenant l'en-tête ("Redirect: restricted/index.php"); sur la page cible restricted/index.php et j'ai maintenant l'en-tête HTTP Redirect. Exactement où devrais-je mettre la fonction ajaxSetup et comment puis-je l'appeler. Désolé pour une question aussi stupide. Je l'ai dans le code de la page avec une alerte> if (redirection) (redirection); ligne de débogage dans les balises de script, mais il ne fonctionne pas. Merci! – chakotha

+0

@ user438858 - Que diriez-vous de * pas * rediriger, et au lieu d'envoyer un en-tête différent au client pour * qu'ils * peuvent rediriger, comme je l'ai ci-dessus ... vous venez d'ajouter cet entête si la connexion a été réussie? –

+0

@ user438858 - Il peut être appelé n'importe où, juste une fois est tout ce dont vous avez besoin, avant de faire des demandes ajax. Si les requêtes ajax ont leur propre 'complete', vous devez changer un peu l'approche, est-ce le cas? –

Questions connexes