Ir ao conteúdo
  • Cadastre-se
fspjonny

Javascript RESOLVIDO retornar valor de função javascript

Recommended Posts

Olá a todos novamente!

 

tenho uma variável PHP $_nome que deveria receber o valor de uma SELECT, porém, não estou passando os valores por GET ou POST, o que seria mais fácil fazer ($_nome = $_POST['nomedoselect']);

 

A tela não pode receber um refresh vindo do POST ou GET, então achei como "solução" via javascript ler o ID do SELECT e com isso pegar o VALUE no return da função, mas não estou conseguindo jogar o retorno nessa variável PHP $_nome.

function pegar_valor(){

	var dado = document.getelementById("id_do_select");
	var exibir = dado.value;
	
	return exibir;
}

no PHP fiz isso:

<?php
$_nome = "<script>document.write(exibir)</script>";

echo "Olá $_nome";
?>

/* É só um exemplo mostrando que a váriável recebeu o valor da função javascript */

sei que muitos vão falar sobre JQuery ou Ajax, mas eu preciso fazer isso em JavaScript mesmo.

 

Alguém me ajuda? não sei se o código que utilizei está correto!

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

@fspjonny Infelizmente sem ajax você não fará isso.

Pois ajax é uma técnica de requisição assíncrona que justamente elimina o refresh(atualização)

 

Dá para fazer tanto em javascript puro( aumenta consideravelmente o número de linhas e complexidade,  mais suscetível a erro humano( de programador) tanto quanto jQuery.   

 

O jquery é um recurso que nem sempre é o melhor para determinada coisa. Tem coisas que no javascript puro fica melhor. Isto é fato.

 

Porém, quando se trata de ajax, requisição assícrona,  emitir dados ao PHP.  nada melhor do que o jquery, que possui uma única função que passa ao php todo seu formulário com apenas uma função.  Chamada de serialize().

 

O exemplo que você deu não é funcional... assim como no php, não se inicia nome de variável com underline.

$_nome  errado

$nome  certo

 

Se quiser, posso disponibilizar um exemplo funcional de requisição assíncrona. Mas isso somente se você quiser. 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
16 horas atrás, DiF disse:

@fspjonny Infelizmente sem ajax você não fará isso.

Pois ajax é uma técnica de requisição assíncrona que justamente elimina o refresh(atualização)

 

Dá para fazer tanto em javascript puro( aumenta consideravelmente o número de linhas e complexidade,  mais suscetível a erro humano( de programador) tanto quanto jQuery.   

 

O jquery é um recurso que nem sempre é o melhor para determinada coisa. Tem coisas que no javascript puro fica melhor. Isto é fato.

 

Porém, quando se trata de ajax, requisição assícrona,  emitir dados ao PHP.  nada melhor do que o jquery, que possui uma única função que passa ao php todo seu formulário com apenas uma função.  Chamada de serialize().

 

O exemplo que você deu não é funcional... assim como no php, não se inicia nome de variável com underline.

$_nome  errado

$nome  certo

 

Se quiser, posso disponibilizar um exemplo funcional de requisição assíncrona. Mas isso somente se você quiser. 

Bom dia DiF!

Sim, por favor gostaria de ver sua solução em Ajax, acho que não vou ter remédio a não ser usar Ajax ou JQuery

 

Existe um equívoco quanto a utilização do underscore/underline. no inicio de uma variável, o underscore/underline. é o único caractere que pode ser usado no começo de uma declaração de variável, inclusive outras linguagens como o Perl, Javascript, Python, etc... fazem o uso do underscore/underline..

 

A nomeação de variáveis precisa seguir algumas regras e convenções

  • Não iniciar o nome com números.
  • Não utilizar espaços em branco.
  • Não utilizar caracteres especiais, somente underscore/underline.
  • Criar nomes relevantes para facilitar o entendimento do código.
  • Devem ser declaradas em minúsculo. Nos casos de nomes compostos, a primeira letra de todas as palavras, menos da primeira, deve ser maiúscula (ex: dataAniversario) ou separe-as pelo caractere underscore/underline (ex.: data_Aniversario).
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@fspjonny  Ok!  Fico feliz que você tenha mente aberta para soluções. Muita gente torce o nariz no jQuery achando que ele reduz desempenho.  O lance é saber QUANDO usar!  Nem sempre o jQuery é a melhor solução, mas as vezes é!

No caso da sua dúvida, o jQuery com ajax vem a calhar!

 

Antes de tudo, você precisa importar a biblioteca jQuery no seu código.

Para isso, você pode utilizar o CDN do google, que é um servidor live do jQuery. A vantagem de usar ele é que é  99.9% uptime. Dificilmente vai sair do ar.    Desvantagem, depende da requisição do servidor do google.   Se você não quiser depender da requisição, pode baixar o arquivo jQuery  e colocar dentro do seu próprio servidor!

 

Tendo importado vamos ao exemplo.

 

Primeiro o Formulário em HTML. Vou seguir a ideia do tópico e usar somente um campo select que é o que você precisa. Claro que se quiser outros campos aí é só me dizer que eu incluo em outro exemplo!

 

<form id="formulario" action="#">
  <select name="estado" class="select">
    <option value="Rio de Janeiro">Rio de Janeiro</option>
    <option value="São Paulo">São Paulo</option>
    <option value="Rio Grande do Sul">Rio Grande do Sul</option>
    <option value="Paraná">Paraná</option>
  </select>
  <input type="submit" name="Enviar" class="btn-enviar"/>
</form>  
    
  

Como pode ver, no elemento form, eu omiti o action e o method. Porque vou fazer isso pelo jQuery.

 

Agora vem a mágica, o pulo do gato!

 

No jQuery podemos chamar a função $.ajax()  quando o usuário clicar no botão "enviar" formulário.

 

$(document).ready(function(){

   //Armazenamos o botão em uma variável  
   var enviar = $(".btn-enviar");

   //Ação de click
   enviar.on("click", function(){
        
        //Armazena o value do select na variável 
        var select = $(".select").val();

        //Chama a função ajax  
        $.ajax({
                url: "recebeDados.php",
                method: "POST",
                dataType: "HTML",
                data: {estado: select} 
              }).done(function(retorno){
                    alert(retorno);
            }).fail(function(retorno){
                     alert(retorno);
        }); 

    });
});

NO arquivo php chamado  recebeDados.php você recebe o valor:

$estado = $_POST["estado"];

if(isset($estado)):
    echo " O estado escolhido foi: $estado";
else:
   echo "Por gentileza selecione uma das opções.";
endif;

Basicamente recebemos o valor do select vindo do ajax na variável $estado.   Verifica-se se ela é vazia ou não. Se não estiver vazia, vai aparecer um alert() com a frase que está dentro do echo.

 

Sim, no ajax, você só precisa do retorno em texto.

 

O exemplo é bem simples.  Repare que no código jquery parece ser grande... mas é só porque eu coloquei espaçamentos e comentários. Se retira reduz bastante as linhas!

 

7 horas atrás, fspjonny disse:

Existe um equívoco quanto a utilização do underscore/underline. no inicio de uma variável, o underscore/underline.

Isso pode valer para demais linguagens, mas, no PHP, o underline na frente (logo depois do "sifrão") é reservado para variáveis do próprio php, como  $_POST,  $_GET e outras. 

Funcionar? Funciona até, mas ao meu ver é uma péssima prática de programação. Pode-se facilmente confundir.

 

Então, recomendo que evite.  A única situação que eu considero que possa usar o underline no inicio é quando você está trabalhando em orientada a objetos e quer diferenciar uma variável local.  

 

Digo isso, porque fui ensinado assim na faculdade. Pode ser que naquela época o php era de outra versão. Isso pode ter sido mudado. Pelo sim e pelo não, é mais garantido não usar!

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde DiF e obrigado pela ajuda!

Vou testar esse código para efeito de estudo, pois ví coisa boa aí no Ajax que até agora só dei uma leve passada por ele e não estudei por completo.

Sem dúvidas que o "saber QUANDO usar", é essencial ainda mais quando se trata de tempo de resposta, e como você mesmo disse, uma aplicação poderá ter certos problemas dependendo da velocidade com que o dado é computado, no caso de usar bibliotecas externas tem alguns riscos inerentes.

 

Eu consegui resolver agora a tarde essa pendenga, apenas mudando a forma de como captar o valor do POST.

 

Nos testes que fiz, eu armazenei o POST em minha Sessão, e eu poderia resgatar ela para outras variáveis quando necessário, o que inclusive me reduziu algumas linhas de código para realizar distintas operações de consulta, exclusão e alteração, já que o valor vindo da SELECT estaria presente enquanto a sessão estivesse ativa, podendo ser modificada a qualquer momento em que o usuário fizesse uma nova seleção, acabou por servir para outras aplicações.

 

Antes ao realizar o POST o valor da SELECT era usado uma única vez por aba, então se perdia tempo reprocessando o que já tinha sido feito antes, achei que usando um script para ler o ID e pegar o valor da SELECT seria "a melhor forma de imitar uma Global", sem necessariamente usar uma. Foi erro da minha parte isso.

 

Grato mais uma vez DiF, o tópico pode ser marcado como resolvido!

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@fspjonny Legal!  Qualquer coisa estamos a sua disposição.

Quanto a marcar como resolvido, você mesmo pode marcar clicando no ícone de "check" na tarja cinza do lado direito do nome do post! :thumbsup:

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
6 minutos atrás, DiF disse:

@fspjonny Legal!  Qualquer coisa estamos a sua disposição.

Quanto a marcar como resolvido, você mesmo pode marcar clicando no ícone de "check" na tarja cinza do lado direito do nome do post! :thumbsup:

Bacana, eu não sabia disso, procurei nos posts daqui e alguém sugeriu fazer isso para que a moderação pudesse marcar, eu realmente senti falta dessa autonomia de encerrar o meu post, mas agora que sei direito onde é ficou show!

 

Muito obrigado DiF!:thumbsup:

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×