bom, como você viu a mensagem tá aí, só usá-la pra mostrar na tela do jeito que vc achar melhor.
Mas como eu pego a messagem … essa é a questão…
E sobre o envio do formulário ? É correto enviar pelo método Get ? Não post ?
dá uma olhada:
{\"errors\": [{\"message\": \"Nome de rede existente.\",\"category\": \"error\"}]}
ou seja, da variável que veio na função, vc tem que chamar variavel.errors[0].message
ex:
.error(function(data) {
var mensagem = data.errors[0].message;
alert(mensagem); // ou algo melhor
});
o formulário tem que ser @Post, mas nesse caso vc tá fazendo um ajax ANTES de submeter o formulário, só pra verificar se a validação está correta. Como esse ajax não modifica nada no servidor, pode ser @Get sem problemas.
entendi ali em cima …
Mas nesse caso cara
Eu vou fazer essa validação na hora que enviar o formulário e se caso existir algum registro com o mesmo nome eu retorno o erro senão já faço o cadastro no banco
Então deveria nesse caso enviar por post mesmo … tem alguma forma ?
o ideal é vc no success fazer um form.submit() de verdade… algo como isso:
$('#seu-form').submit(function() {
var form = this;
$.getJSON(.....)
.success(function() {
form.submit();
}).error(.....);
});
assim se a requisição ajax deu tudo certo vc faz o submit de tudo.
faltou uma coisa, tem que dar um return false no final desse callback de submit
Entendi … mas como eu faço para não realizar o submit no caso de erro ?
E no caso de sucesso eu não gostaria de retornar pra nenhuma outra página … mas só enviar de volta uma mensagem de sucesso que vai aparecer num alert do tipo "Cadastro realizado’.
então o que vc quer é mais parecido com esse plugin do jquery:
http://malsup.com/jquery/form/
ele transforma o submit de um form qualquer em ajax.
Cara … perfeito … agora ta redondo … da uma olhada no código…
Só to com dificuldade pra descobrir ainda como imprimir a mensagem que enviei no validator do controller no caso de erro.
var formOptions = {
beforeSubmit: validate,
success: showSuccess,
error: showError
};
$('#newNetworkForm').ajaxForm(formOptions);
function showError(responseText, status, err){
console.log(status);
alert("Errors");
}
function showSuccess(responseText, statusText, xhr, jqForm ){
alert("Sucesso");
}
function validate(formData, jqForm, options){
//....
coloquei esse código na função validate…
mas como no caso eu faço pra caso caia no error … ele retornar falso e cancelar o submit ?
$.getJSON("network/validate",
{
"p_network.name" : $("#nomeRede").val()
})
.error(function(data) {
alert("Existe rede com o mesmo nome");
return false;
}) ;
se vc vai fazer um ajaxForm já, faz a validação já no método que recebe o post do form, não precisa criar um método a mais…
daí vc consegue tratar o erro já no showError
Ok …
E no showError como receber a mensagem do validator ? To procurando aqui no console mas não to conseguindo.
Na variavel err vem o valor Not Found não a mensagem
a variavel responseText deveria ter o json, se passou por aquele onErrorSendBadRequest…
na verdade vc pode mudar esse onErrorSendBadRequest por:
validator.onErrorUse(json()).withoutRoot().from(validator.getErrors()).serialize();
o badRequest deve estar procurando uma jsp que não existe.
Ok …
Nesse código que passou o IDE não consegue resolver o json()… ta correto a escrita ?
Results.json() e esse Results é do VRaptor
Agora funcionou porém mesmo com os erros ta caindo no caso success do ajax
justo…
volta pro onErrorSendBadRequest e faz no javascript, muda o formOptions pra:
var formOptions = {
beforeSubmit: validate,
success: showSuccess,
dataType: "json",
error: showError
};
e veja se no error aparece o json
Blz
Funcionou … porém olha que estranho.
function showError(responseText, status, err){
alert('teste');
console.log(responseText);
alert("tam"+responseText.length);
for(var count = 0; count < responseText.length; count++)
{
alert(responseText[count].message);
}
}
No Console aparece o objeto responseText com as mensagens certinho … mas vou imprimir no alert aparece undefined ?
O que fiz de errado ai ?
o responseText tá aparecendo como String ou como Object no console log?
object