Ir para conteúdo

POWERED BY:

Arquivado

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

Vadio

[Resolvido] json erro lógica

Recommended Posts

pessoal to tetando faze uma espécie de estrutura MVC para minhas requisições ajax

ele retorna meu resultado mas na hr de passar adiante da erro o problema ta em alguma lógica ou faltando algum return mas não consigo encontrar

globais.

               var dir = '../../app/';
	var AjaxSuccess = function(data){
		return data;
	}

model

		
	var modelUsuario = {
		login:{
			url: dir+'Receive.php?obj=Usuario&q=login',
			data: $('#login').serialize(),
			type: 'post',
			success: AjaxSuccess
		},
		logout:{
			url: dir+'Receive.php?obj=Usuario&q=logout',
			success: AjaxSuccess

		},
		verificaLogado:{
			url: dir+'Receive.php?obj=Usuario&q=verificaLogado',
			type: 'json',
			sucess:AjaxSuccess
		}

	}

controle

	controllerUsuario ={
		login:function(){					
			$.ajax({
			  	url: modelUsuario.login.url,
				data: modelUsuario.login.data,
				type: modelUsuario.login.type,
			  	success: modelUsuario.login.success

			});
		},
		logout:function(){
		 $.ajax({
			  	url: modelUsuario.logout.url,
			  	success: modelUsuario.logout.success
			});
		},
		verificaLogado:function(){

			$.ajax({
			  	url: modelUsuario.verificaLogado.url,
				type: modelUsuario.verificaLogado.type,
			  	success: modelUsuario.verificaLogado.sucess
			});
		}
	}

view

	var viewUsuario = {
		appendTo: ".usuario",
		login:function(){					

			alert(controllerUsuario.login());
		},
		logout:function(){
		 	alert(controllerUsuario.logout());
		},
		verificaLogado:function(){
			alert(controllerUsuario.verificaLogado());

		}

	};

global ini

	
	viewUsuario.verificaLogado();

 

 

Se eu colocar um alert na global AjaxSuccess com a data ele informa meu resultado mas no view ele não chega alguém consegue ver meu erro?

Compartilhar este post


Link para o post
Compartilhar em outros sites

pq ajax roda de forma assincrona.

 

ou você muda para sincrono, ou você estuda o objeto deferred do jquery 1.5

Compartilhar este post


Link para o post
Compartilhar em outros sites

então ele retorna minha var mas assim percebi q no controler q é onde é feita a requisição não existe return e por isso recebo undefined mas não sei como retornar o resultado da requisição nas funções...

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu te disse como...

usando no modo SINCRONO ou então com o objeto deferred do jQuery 1.5.

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim, estou falando desses.

 

então você fez errado... leia novamente. Exemplo bem simples:

 

 

http://wbruno.com.br/2012/01/23/exemplo-de-uso-jquery-deferred-simples/

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu preciso arruma alguma maneira de instancia meu retorno em uma var e retorna ele para o "controllerUsuario.verificaLogado()"

 

usando deferred ele continuou undefined

 

utilizei daseguinte maneira:


var controllerUsuario ={
//...
		verificaLogado:function(){	
			var r = $.ajax({
			  	url: modelUsuario.verificaLogado.url,
				type: modelUsuario.verificaLogado.type,
			  	success: modelUsuario.verificaLogado.sucess
			}).done( function(data){
				return data;
			});

		}
	}

Compartilhar este post


Link para o post
Compartilhar em outros sites

você precisa pensar em mais "na forma javascript" de fazer as coisas.

trabalhe com callbacks, em vez de tentar "dar return"

 

 

se você quer mesmo o RETURN, então você vai ter q mudar o ajax para SINCRONO.

Compartilhar este post


Link para o post
Compartilhar em outros sites

consegui oque eu queria

tem umas linhas redundantes no controller mas já deu com o deferred mesmo e utilizando meus returns

 

de kk forma obrigado William Bruno

 

ficou assim

controller

var controllerUsuario ={
		login:function(){					
			return $.ajax({
			  	url: modelUsuario.login.url,
				data: modelUsuario.login.data,
				type: modelUsuario.login.type,
			  	success: modelUsuario.login.success
			}); 
		},
		logout:function(){
		 	return $.ajax({
			  	url: modelUsuario.logout.url,
			  	success: modelUsuario.logout.success
			});
		},
		verificaLogado:function(){	
			return $.ajax({
			  	url: modelUsuario.verificaLogado.url,
				type: modelUsuario.verificaLogado.type,
			  	success: modelUsuario.verificaLogado.sucess
			});
		}
	}

view

		
	var viewUsuario = {
		appendTo: ".usuario",
		login:function(){							
			controllerUsuario.login()
			.done(function(data){
				alert(data);
			});
		},
		logout:function(){
		 	controllerUsuario.logout()
			.done(function(data){
				alert(data);
			});
		},
		verificaLogado:function(){
			controllerUsuario.verificaLogado()
			.done(function(data){
				alert(data);
			});

		}

 

o código completo sem redundancia fico assim:

<script type="text/javascript">
$(function(){
	var dir = '../../app/';
	var r = null;

	var modelUsuario = {
		login:{
			url: dir+'Receive.php?obj=Usuario&q=login',
			data: $('#login').serialize(),
			type: 'post'
		},
		logout:{
			url: dir+'Receive.php?obj=Usuario&q=logout'

		},
		verificaLogado:{
			url: dir+'Receive.php?obj=Usuario&q=verificaLogado',
			type: 'json'
		}

	}
	var controllerUsuario ={
		login:function(){					
			return $.ajax({
			  	url: modelUsuario.login.url,
				data: modelUsuario.login.data,
				type: modelUsuario.login.type
			}); 
		},
		logout:function(){
		 	return $.ajax({
			  	url: modelUsuario.logout.url
			});
		},
		verificaLogado:function(){	
			return $.ajax({
			  	url: modelUsuario.verificaLogado.url,
				type: modelUsuario.verificaLogado.type
			});
		}
	}

	var viewUsuario = {
		appendTo: ".usuario",
		login:function(){							
			controllerUsuario.login()
			.done(function(data){
				alert(data);
			});
		},
		logout:function(){
		 	controllerUsuario.logout()
			.done(function(data){
				alert(data);
			});
		},
		verificaLogado:function(){
			controllerUsuario.verificaLogado()
			.done(function(data){
				alert(data);
			});

		}
	};

	viewUsuario.verificaLogado();


});
</script>

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.