Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
eu sempre tive problemas em usar o remote com validate.
estou utilizando o jquery 1.8.2 e a última versão do validate..
quando utilizo o remote o erro da sempre independente se o retorno é true ou false.
$('#form').validate({
rules: {
email : {
remote: {
url: "ajax.php",
type: "POST",
data: {
email: function(){
return $('#email').val();
}
}
}
}
})
},ele sempre traz o erro, mesmo que não existe.
não coloquei o ajax.php por que todos os retornos estão certos parece que é algo do plugin mesmo que buga.
se já aconteceu com alguém por favor da uma ajuda ai.
case 'existeEmail':
$usuario = new Usuario();
echo ($usuario->existeRegistro('email', $_POST['email'])) ? 'false' : 'true';
break;
public function existeRegistro($campo, $val = ''){
if(is_string($campo)){
$val = ($campo == 'senha') ? 'HEX("'.base64_encode($val).'")' : "'{$val}'" ;
return (DB::conn()->query("SELECT COUNT(id) FROM cc_users WHERE {$campo} = {$val}")->fetchColumn() > 0);
} else {
$sql = "SELECT COUNT(id) FROM cc_users WHERE ";
foreach($campo as $k => $v){
$val = ($k == 'senha') ? 'HEX("'.base64_encode($v).'")' : "'{$v}'" ;
$sql .= "{$k} = {$val} AND ";
}
$sql = substr($sql, 0, -4);
return (DB::conn()->query($sql)->fetchColumn() > 0);
}
}
mais como disse, todos os retornos estão certos;Tem certeza de que está entrando no case ?
case 'existeEmail':
muda para GET, ou acompanhe a requisição via firebug. Me parece que não está executando o case correto.
eu já debugei tudo, o exemplo que mandei ai eu escrevi na hora não esta desse jeito.
o problema é com o plugin mesmo, não sei se a é a versão ou algo parecido.
creio que não cara.
Sempre que eu "me perco", eu isolo o problema e testo ele separadamente.
Sem o restante, até sem layout.
Pelo Firebug o retorno foi oque você esperava ?
eu trabalho com o chrome e uso o inspect para debugar.
ele me retorna o $_POST['email'], ele retorna a quantidade de colunas que possuem o email e também me retorna true or false dependendo do resultado.
ai quando vai para o validate ele fica dizendo que o email já esta cadastrado mesmo se não estiver, no caso a mensagem eu defini em messages.
Fiz um teste isolado aqui. O plugin funciona bem.
<!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form action="" id="form">
Email: <input type="text" name="email" />
<input type="submit" name="ok" value="ok" />
</form>
<div id="result"></div>
<script type="text/javascript" src="jquery-1.7.2.js"></script>
<script type="text/javascript" src="jquery.validate.js"></script>
<script type="text/javascript">
jQuery(document).ready(function(){
var $form = jQuery('#form'),
$result = jQuery('#result');
$form.validate({
rules: {
email : {
remote: { url: "ajax.php" }
}
},
messages: {
email: 'Email já existe!'
}
})
});
</script>
</body>
</html>
e o php:
<?php
if( $_GET['email']=='a@a.com.br' )
echo 'false';
else
echo 'true';Vamos lá.
versão que utilizei do jquery foi a 1.8.2
e eu fiz por post
$('#form').validate({
rules: {
email : {
remote: {
url: "ajax.php",
type: "POST",
data: {
act: 'verificarEmail',
email: function(){
return $('#email').val();
}
}
}
}
})
},e é dai que vem o case por que essa página ajax trata todas as requisições do ajax.
_____________________________________________________
Obrigado pela atenção de qualquer forma mas farei as verificações manuais.
Do que eu testei, essas linhas:
email: function(){
return $('#email').val();
}
são desnecessárias e estavam ocasionando erros no retorno da requisição.
Forcei um cabeçalho JSON tb, e funcionou aqui:
header('content-type: application/json; charset=utf-8');
Do que eu testei, essas linhas:
email: function(){
return $('#email').val();
}
são desnecessárias e estavam ocasionando erros no retorno da requisição.
exatamente isso..
obrigado cara.
Posta o teu arquivo ajax.php por favor.