Ir para conteúdo

POWERED BY:

Arquivado

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

DiegoRiba

Função não retorna valor.

Recommended Posts

Bom dia Pessoal.

Estou desenvolvendo uma integração com backoffice de agência de viagens.

Tenho um problema em uma função que fiz (gambiarra admito) em Jquery com javascript.

A função pegaItinerarios:

Se eu for nesta função na linha de retorno e exibir na tela, ela me retorna o valor corretamente.

Porém se eu chamar esta função depois, e atribuir o valor retornado a uma variável ou até exibir na tela, ela me retorna nula.

Para ficar mais fácil, aqui abaixo vou postar os códigos. Lembrando que os endereços estão coerretos, e eu não posta-los aqui,

function pegaItinerarios(id){
	if(id != null){
	id2 = new String(id)
	id = Right(id2, id2.length - 1);
	var origem = "";
	var destino = "";
			  $.ajax({
       			  type: 'get',
			  // a url do xml
				  url : "#", //Endereço da Página Ajax
				  dataType : "xml", // Tipo de dados

				  success : function(xml){ // se terminar com sucesso

					   $(xml).find("multiRef").each(function(){ // Looping que varre o xml na Tag multiRef							
							if($(this).attr("id") == id){								
								origem += $(this).find("origin").text()
								destino += $(this).find("destination").text()
							}
						});return origem;
				 }
		  });
	}
}

A parte da função que chama a pegaItinerarios e atribui o valor.

Porém retorna nulo.

$(this).find("itins").each(function(){
var id = $(this).attr("href");
itinerario = pegaItinerarios(id);
});

E aqui uma breve explicação do XML.

Existe uma tagf que se chama MultRef que representa uma venda.

Dentro desta tag mulRef existe uma tag em formato de array chamada itins.

E nela temos os ids dos itinerários respectivos.

Como no trecho abaixo.

<multRef>
...
  <itins>
    <itins href="#id2"></itins>
    <itins href="#id3"></itins>
  </itins>
...
</multRef>

Pessoal, desda já agradeço pela ajuda.

Obrigado.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não retorna pq o ajax é assincrono.

 

Mude para sincrono, ou use o Deferred ou ainda use Promises.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá William Bruno.

Eu fiz o que você falou.

Mudei o ajax para sincrono mas mesmo assim não me retorna nada(na verdade a consulta ficou mais lenta).

E quanto ao deferred e Promises, eu dei uma pesquisada pq não conhecia.

É bem legal mas não consegui colocar em meu código pois não entendi o suficiente.

Teria como me ajudar mais um pouco como adaptar meu código para me atender este retorno?

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exemplo do Deferred:

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

 

O ajax sincrono vai esperar o retorno do ajax,para depois prosseguir com o seu js. Essa é a definição.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, obrigado a referencia.

Vou dar uma estudada hoje.

Obrigado em, logo mais digo o que consegui...

 

Valeu mesmo emmm...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá novamente Willian.

Fiz algumas modificações na função, mas infelizmente não consegui. Continua retornando undefined.

Alguma ideia? Segue abaixo o código:

var itinerario = " ";

function pegaItinerarios(id){

	if(id != null){
	var id2 = "";
	id2 = id.toString();
	id = Right(id2, id2.length - 1);

			  $.ajax({
 			  type: 'post',
			  url : "#", //Endereço da Página Ajax
			  async: false,
			  dataType : "xml", // Tipo de dados
				  success : function(xml){ // se terminar com sucesso

					   $(xml).find("multiRef").each(function(){ // Looping que varre o xml na Tag multiRef
							if($(this).attr("id") === id){
								itinerario = $(this).find("origin").text().toString() + "/"+ $(this).find("destination").text().toString();
							}
						});
						return itinerario;
				 }
		  });

	}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Hugo, infelizmente não, pois possui dados pessoais dos compradores e dos clientes.

 

Mas enfim, eu consegui resolver de uma forma diferente.

Eu exclui a função pegaItinerarios e fiz tudo que era feito nela na outra função em que a chamava.

Deu certo.

 

Infelizmente não consegui resolver da forma que o Willian propôs, mas vou estudar isso pois é muito interessante e útil.

 

Obrigado a vocês pela ajuda.

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.