Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

eronventer

[Resolvido] Definir retorno de uma requisição ajax

Recommended Posts

Olá pessoal,

 

Na função abaixo gostaria que me retornasse o "data" de uma requisição ajax, porém esse método não funciona,

por acaso existe alguma forma de fazer funcionar esse retorno?

 

function enviaDadosFormulario(acao, form)
{
var ret = ""; 

$.ajax(acao, { 
	type: 'POST',
	dataType: 'text',
	data: $(form).serialize(),
	success: function(data, textStatus, jqXHR) { 
		ret = data;
	} 
});

return ret;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

ou você trabalha com ajax sincrono ou você usa o objeto deferred

http://www.maujor.com/blog/2011/02/01/o-objeto-deferred-da-jquery-1-5/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Explicando no seu script pra que você entenda.

 

function enviaDadosFormulario(acao, form)
{
//é executada AGORA
       var ret = ""; 

//é declarada AGORA
       $.ajax(acao, { 
               type: 'POST',
               dataType: 'text',
               data: $(form).serialize(),
//a "success" só será chamada daqui a VÁRIOS milissegundos
//quando o navegador terminar de carregar a página de destino
               success: function(data, textStatus, jqXHR) { 
                       ret = data;
               } 
       });

//o return ret será executado AGORA. 
//(a não ser que você faça que a requisição ajax acima seja síncrona
//por isso, em requisições não síncronas, o return ret sempre será vazio,
//afinal ainda não deu tempo do ajax terminar de carregar.
       return ret;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentei utilizar esse objeto deferred retornando um json, mas não funcionou

então você fez errado.

poste a sua tentativa, ou releia artigos até funcionar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A função ficou da seguinte forma:

function enviaDadosFormulario(acao, form)
{
var jqxhr = $.ajax(acao, { data: $(form).serialize(), dataType: 'json', type: 'post' });
return jqxhr;
}

 

Na minha validação tentei utilizar assim, porém nem exibiu o alert:

$("#frm_cadastro").validate({
rules: {
	email: {
		required: true,
		email: true,
	}
},
submitHandler: function(form) {
	var remail = enviaDadosFormulario('acoes/verifica-email/', "#frm_cadastro");
	remail.done(function(data) { 
		alert(data);
	});
}
});

Compartilhar este post


Link para o post
Compartilhar em outros sites

vamos "descobrir" o "pq" não exibiu o alert.

 

Aperte Ctrl+Shift+J no Firefox(console de erros):

http://wbruno.com.br/blog/2011/03/31/como-debugar-javascript-firefox-erros-comuns/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, e olhando a aba XHR ?

 

retorna 200 ?

http://wbruno.com.br/blog/2011/04/14/como-debugar-ajax-firebug/

 

modificações:

function enviaDadosFormulario(acao, form)
{
   return $.ajax({  
       type: 'GET,
       url: acao, 
       data: form.serialize(), 
       dataType: 'json'
   });
}

 

$("#frm_cadastro").validate({
       rules: {
               email: {
                       required: true,
                       email: true,
               }
       },
       submitHandler: function(form) {
               var remail = enviaDadosFormulario('acoes/verifica-email/', form);
               remail.done(function(data) { 
                       alert(data);
               });
       }
});

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na aba XHR é exibido 2 requisições, uma contendo o status "302 Found" e abaixo a "200 OK", qual será o motivo dele ter exibido 2 requisições?

 

Inclusive, no retorno na aba HTML exibiu o resultado esperado: "{ achou : '1', erro : 'Este e-mail já consta cadastrado em nosso sistema.' }", mas o alert não foi exibido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

não sei dizer, aparentemente tem mais código js interferindo.

 

você aplicou a alteração que sugeri ?

 

 

 

você está enviando esse jSON com encode UTF8 ?(envie um header de utf8 com o teu server-side)

Compartilhar este post


Link para o post
Compartilhar em outros sites

William, muito obrigado pela força, resolvi o problema do alert, em meu script php coloquei as mensagens de retorno em um array e apliquei a função "json_encode()", anteriormente eu estava apenas imprimindo um "echo"

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.