Jump to content
JosMiguel

Validação de formulário Ajax+php

Recommended Posts

JosMiguel

Boas.

precisava de ajuda na validação de um formulário.

então é o seguinte:

após preenchido o formulário, ele é enviado por ajax (metodo POST, xmlhttp.send(JSON)) para uma pág PHP onde faz a validação dos dados recebidos. De seguida ele retorna um array, em formato JSON, onde contem informação dos dados que não passaram na validação. algo como isto:

[{"id":"mailInput","erro":"mailErrado"},{"id":"val2","erro":"contribuinteErrado"},{"id":"val1","erro":"telfErrado"}].

a partir daqui o pretendido é pegar na informação do array, mais concretamente o value do "id" para alterar o aspecto visual das input box do formulário. algo como isto:

document.getElementById(response.id).style.border='2px solid red';

a dúvida resume-se em não compreender porque ele não consegue executar essa alteração. algo de errado se passa após recepção dos dados no lado do ajax.

aqui fica o código para analisarem:

obrigado.

<script>
function insertData(div_a_preencher)
{
var conteudo = getConteudo(); //JSON.stringify(saveValues);
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{

/*
recebe => [{"id":"mailInput","erro":"mailErrado"},{"id":"val2","erro":"contribuinteErrado"},{"id":"val1","erro":"telfErrado"}]
formato =>{"id":"id da div a usar", "erro":"nome do erro"}
*/
var response = JSON.parse(xmlhttp.responseText);

var soma = Object.keys(response);
for (i=0; i<soma.length; i++)
{
 document.getElementById(response[i].id).style.border='2px solid red';
}
//document.getElementById(div_a_preencher).innerHTML=xmlhttp.responseText;
}
else
{
document.getElementById(div_a_preencher).innerHTML="Um erro ocorreu: " + xmlhttp.statusText;
/* var headers = xmlhttp.getAllResponseHeaders ();
alert(headers); */
}
}
xmlhttp.open("POST", 'insereContacto.php', true);
xmlhttp.setRequestHeader( "Content-Type", "application/json" );
xmlhttp.send(conteudo);
}
</script>

Share this post


Link to post
Share on other sites
JosMiguel

Não. ele está a funcionar. Apenas não estou a ver como tratar os dados recebidos pelo php.

Share this post


Link to post
Share on other sites
I-NOZex

Não. ele está a funcionar. Apenas não estou a ver como tratar os dados recebidos pelo php.

ahhh

ya faz o que o yoda disse, usa um depurador js

na seguinte linha:

for (i=0; i<soma.length; i++)
{
	 document.getElementById(response[i].id).style.border='2px solid red';
}

adiciona isto

for (i=0; i<soma.length; i++)
{
	 console.log(response[i].id);
	 document.getElementById(response[i].id).style.border='2px solid red';
}

e ve na consola o que aparece


B2R » Beat2Revolution v3.0b | Regista e divulga-nos

beat2revolution.net

Share this post


Link to post
Share on other sites
HappyHippyHippo

aparece-me estes erros. deve ser no JSON.parse()

result.png

o erro não é na função mas sim no conteúdo ques a função está a tentar processar

por outras palavras:

Usa o Firebug / Chrome Inspector para verificar se algo de errado acontece no pedido ajax.


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
JosMiguel

O conteudo é passado pelo php:

onde $retorno é um array.

echo json_encode($retorno);

vem exatamente como referi anteriormente.

[{"id":"mailInput","erro":"mailErrado"},{"id":"val2","erro":"contribuinteErrado"},{"id":"val1","erro":"telfErrado"}]

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.