Bonjour,
Sur mon site cakePHP je viens de mettre un login en AJAX.
Lorsque le retour du password et OK je fais un window.location.href
et une fois la page chargée j'aimerai afficher un popup de type toastr pour afficher différentes informations.
$.post(linkAction,phpData,function(data){
if(data==false){
swal("Erreur authentification","Veuillez vérifier votre mot de passe","error")
}else{
//welcome
toastr.options = {
closeButton: true,
progressBar: true,
timeOut: 10000,
onclick: null
};
// Display a success toast, with a title
window.location.href=basepath+"/book";
toastr.success('Bienvenue sur app',data['nom_complet'])
}
},"json");
le problème c'est que le comportement est asynchrone donc la page commence à charger, le popup toastr s'affiche mais des que la page s'affiche le popup disparait... je ne sais pas trop comment faire
J'aimerai vraiment pouvoir afficher des popups avec différentes informations une fois que la personne s'est connectée... auriez vous une idée ??
Merci par avance
$.post(linkAction,phpData)
.done(function( data ) {
/*
ici, les données sont chargées
*/
});
@pluche
Pierre
Le .done permet de réaliser de façon à ce que ton script soit exécuté à la fin du chargement
.done() fait la mme chose que ce que j'ai fait ça execute le code au retour de mon appel ajax, ça ne change rien à mon problème malheureusement.
Mon problème c'est de déclencher le popup une fois que window.location.href est terminé et non pas de déclencher des actions quelqonques au retour de ma requete ajax, ça ça fonctionne.
non car le window.location est asynchrone, le toastr.popup() se fait avant que le window.location ait terminé
window.location asynchrone ??????????
je ne crois pas, il charge la page, donc, remplace la page déjà chargée
@plus.
Pierre
oui,
par contre le laps de temps qu'il met pour faire son chargement, toastr à largemet le temps de s'afficher... avant que le chargement de page se soit effectué. C'est le comportement que je constate en tout cas
setTimeout(function(){ window.location.href=basepath+"/book"; }, 4000);
toastr.success('Bienvenue sur app',data['nom_complet']);
@pluche
Pierre
En fait, si je résume mon probleme:
1) authentification en ajax
2) redirection
3) une fois redirigé je veux déclencher une ou plusieurs actions qui afficheront un ou plusieurs popups.
Le problème: je veux que ces actions soit déclenchées uniquement aprés le login et pas chaque fois que j'arrive sur la page accueil sinon à chaque F5 les popups s'afficheront.
Bonsoir,
J'ai trouvé une solution avec les sessionStorage que je viens de découvrir:
Voici la solution mis en place
$(function() {
var basepath=$("#basepath").attr("data-path");
toastr.options = {
closeButton: true,
progressBar: true,
timeOut: 10000,
onclick: null
};
if (sessionStorage.getItem('advertOnce') !== 'true') {
$.post(basepath+"/Users/usersInfoAjax/",{},function(data){
//bienvenue popup
toastr.success('Bienvenue sur ...blabla', data["nom"]);
//recrutement en cours
if(data["nbrecrue"]>0){
toastr.warning('Vous avez '+ data["nbrecrue"] +' recrutements en cours.\nPouvez vous renseigner leurs status?',
'Recrutements',
{timeOut: 15000}
);
}
},"json");
sessionStorage.setItem('advertOnce','true');
}
});
Un sessionStorage.clear() est fait avant l'appel au login .$post()...