Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Galera,
estou tentando enviar um form por jquery com ajax mas não estou conseguindo, e não tow sacando o problema.
Tenho um form normal:
<form id="formAddUser" action="<?php echo $this->webroot."cadastro/validar/"?>" method="post">
<input type="text" name="data[Cadastro][nome]" />
<input type="submit" value="Enviar" />
</form>
Meu controller:
function validar(){
//so para teste
$json = array();
$json["status"] = "erro";
$json["msg"] = "Deu erro: ";
die(json_encode($json));
}//end function validar($data = null)
e o javascript:
jQuery("#formAddUser").submit(function() {
var data = jQuery(this).serialize(); // Dados do formulário
// Envia o formulário via Ajax
jQuery.ajax({
type: "POST",
url: this.action,
data: data,
cache: false,
dataType: "json",
success: function(json)
{
if (json.status == "erro")
{
alert('erro');
}
else if (json.status == "ok")
{
alert('ok')
}
},
error:function(XMLHttpRequest, textStatus, errorThrown)
{
alert("EITA: malassombro");
}
});
return false; // Previne o form de ser enviado pela forma normal
});
Fiz tudo quanto foi tipo de teste (com dados/sem dados no form, com json/sem json,...), mas nunca funciona... dá sempre o erro alert("EITA: malassombro");
Tow fazendo algo errado?
Tow querendo enviar um formulário via jquery-ajax-json, somente!
Pois eh, eu já fiz tudo quanto foi debug manual que eu imaginei.
O javascript tá funcionando,
O jQuery também;
Se mandar o form com o javascript desabilitado ele retorna uma mensagem json normal.
mas quando tenta com o ajax, ele sempre retorna o status de error:function(){...}.
Tá muito cavernoso, não consigo entender essa bronca... =/
Eu descobri o porque do erro cavernoso...
Quando eu submeto o form pelo jquery/ajax, ele procura a minha action index, nesse caso quando eu chamo a mesma página que está o form, e ele retorna todo o conteúdo da página, só que em formato html...
Aí só pra teste, eu mandei ele submeter para a action validar, mas aí ele dá erro pq não existe nenhuma view para o método validar... e mesmo criando a view, ele continua dando problema... mas se no jquery eu mudar o tipo de retorno pra html, ele funciona direitinho... pelo menos quanto a resposta (¬¬)
Então como é que eu faço pra validar isso?
Eu consegui fazer funcionar, só não sei se é assim mesmo.
no meu controller eu fiz assim:
function validar($json = false){
$return = array();
$return['status']="ok";
$return['msg']="Testing, testing.";
echo json_encode($return);
}//end function validar($data = null)
e no jquery, eu passei a url site/cadastro/validar/, e criei a view para a action validar também, só que deixei ela vazia..
Funcionou... pelo menos não deu erro do ajax... mas é assim mesmo? Ô.õ_
Você não precisa criar uma view vazia, basta:
$this->autoRender = false; // não renderiza view alguma
Configure::write('debug', 0); // não mostra debug
$this->layout = 'ajax'; // Utiliza um layout para ajax (não é necessário neste caso)
Oque aparece no action? (quando ja estiver interpretrado)
Bom.. você terá que fazer uma bateria de testes... eu também já tive muitos problemas com ajax/jQuery xDOs dados estão sendo serializados corretamente? O script está conseguindo, no minimo, acessar a URL?
Pode ser varias coisas... tem que ir eliminando aos poucos....