Bonjour,
Voila je rencontre un petit problème avec mon code
Je ne veux pas bloquer la page quand test=true et si test=false la page doit etre bloquer.
le probleme c'est que test n'arrive pas à prendre de valeur dans la methode $.post. Qu'est ce que dois-je faire
$(function () {
$('#testjson').submit(function(){
login = $(this).find("input[name=login]").val();
password = $(this).find("input[name=password]").val();
test = true;
url = $(this).attr("action");
var rjson = $.post(url,{login:login,password:password}, function(data) {
if(data.error == 'yes'){
$(".entete").empty().append(data.text);
test = false;
}
},'json');
console.log(test);
if(test == false){
return false;
}else{
return true;
}
});
});
Merci Pierrot et Lartak de m'avoir aider
J'ai trouvé la reponse.
async : false marche avec $.ajax() et la fonction devien synchrone, pas avec $.post()
ca marche
voici le code
$(function () {
$('#testjson').submit(function(){
login = $(this).find("input[name=login]").val();
password = $(this).find("input[name=password]").val();
url = $(this).attr("action");
test = true;
$.ajax({
url: url,
type: "POST",
async: false, // Mode synchrone
data: ({
login:login,
password:password
}),
dataType: "json",
success: function(data){
if(data.error == 'yes'){
$(".entete").empty().append(data.text);
test = false;
}
}
});
console.log(test);
if(test == false){
return false;
}else{
return true;
}
});
});
Merci à vous
qu'appelles tu bloquer la page ?
et que fait ton code ?
pour avoir data.error il faut d'abord parser data.
de plus, ajax est asynchrone, donc ta variable test a des chances d'être toujours true.
@plus
Pierre
ce code recupere le valeur dans le formulaire d'authantification
<form action="<?php echo BASE_URL.'/user/login'; ?>" method="post" id="testjson" >
<div class="form-group has-feedback">
<input type="email" class="form-control" placeholder="Email" name="login">
<span class="glyphicon glyphicon-envelope form-control-feedback"></span>
</div>
<div class="form-group has-feedback">
<input type="password" class="form-control" placeholder="Password" name="password">
<span class="glyphicon glyphicon-lock form-control-feedback"></span>
</div>
<button type="submit" class="btn btn-primary btn-block btn-flat" >Sign In</button>
</form>
il reste bloquer sur cette page a cause du "return false;" meme si le mot de passe et login entrés par l'utilisateur sont justes.
je cherche un moyen pour avoir "return true;" pour que l'action du methode POST charge après validation.
si le mot de passe et login entrés par l'utilisateur sont faux, je reste sur la page de login et password avec message d'erreur
si le mot de passe et login entrés par l'utilisateur sont justes, je laisse l'action du methode POST executer
Voici le login.php
if(!empty($user)){
$this->Session->getSession_('User',$user);
}else{
$juser = array('error'=>"yes",
'text'=>'<p class="login-box-msg" style="color:#F00" id="entete"> Verifier votre mot de pass et login</p>');
die(json_encode($juser));
}
salut,
$(function () {
$('#testjson').submit(function(){
login = $(this).find("input[name=login]").val();
password = $(this).find("input[name=password]").val();
test = true;
url = $(this).attr("action");
var rjson = $.post(url,{login:login,password:password},
async : false,
function(data) {
var x =JSON.parse(data),
if(x.error == 'yes'){
$(".entete").empty().append(x.text);
test = false;
}
},'json');
console.log(test);
if(test == false){
return false;
}else{
return true;
}
});
});
peut être que comme ça, ça pourrait fonctionner, je ne garantis rien ;)
@plus
Pierre
Bonjour.
Si tu n'as que le code suivant dans ta page login.php :
if (!empty($user)) {
$this->Session->getSession_('User',$user);
} else {
$juser = array('error'=>"yes", 'text'=>'Verifier votre mot de pass et login');
die(json_encode($juser));
}
c'est tout à fait normal que tu ne rentres jamais dans la première condition dans le code PHP puisque tu ne définies à aucun moment la variable $user
dans celui-ci.
Et puis quel est l'intérêt de définir la variable rjson
dans ton code javascript si tu ne l'utilises à aucun moment cette variable ?
salut,
avec $.post la fonction peut être syncrone
$.ajaxSetup({async: false});
$.post(.....);
@plus
Pierre