Ir para conteúdo

POWERED BY:

Arquivado

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

a1click_mac

[problema] - Callback PHP + Javascript

Recommended Posts

Pessoal tenho um código abaixo que faz o envio do FORM via AJAX + PHP.

 

O mesmo me retorna no callback do JS o resultado de como foi e assim eu informo se teve algum error ou foi confirmado.

 

- O problema em questão é que... nesse meu sistema ( qualquer )

 echo /* ou */ print 

que estiver no PHP, acaba retornando como callback de todos, então fica ruim para eu poder retornar somente os echo se os campos não forem preenchidos ou somente quando todos os campos forem preenchidos.

 

# FORM - JS #



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>

<script type="text/javascript">

$(function($) {

$("#formulario").submit(function() {

var numero = $("#numero").val();

$.post('processar.php', {numero: numero}, 


			function(resposta) {

			// com error
			if (resposta != false) {

			$("#erro").fadeIn(); // mostra div erro
			$("#erro").html(resposta); // mostra os erros na div

			} else { // sem error

			$("#numero").val(""); // limpa o campo
			$("#erro").fadeOut(); // retira div erro

			}



});
});
}); // end function ativa

</script>
<style type="text/css">

body{font-family:Arial, Helvetica, sans-serif; font-size:13px;}
#error{display:none; background-color:#C00; color:#FFF;}

</style>

</head>
<body>


<!-- FORM -->
<form id="formulario" action="javascript:func()" method="post">

Número passaporte<br />
<input type="text" name="numero" id="numero" size="50" placeholder="Informe o número"/><br /><br />
<input type="submit" name="ok" value="VERIFICAR" />

</form>

<div id="erro"></div>

</body>
</html>


 

 

# PHP - interno #

<?php

// campos

$numero=$_POST['numero'];

// verificar campos

if(empty($numero) OR !isset($numero))
{

echo @$msg = "Informe o NÚMERO do passaporte<br>";

}

// numero foi preenchido

if(!empty($numero) AND isset($numero))
{

echo "NÚMERO, OK";	

}


 

--

 

# Gostaria de poder fazer com que ele fizesse algum ( if ) no javascript referente ao que foi feito no ( interno.php ), assim eu posso definir um único valor de ( erro ) para ( campos obrigatorios ) e se esse valor de ( error -> for == 0 ) ele faz o retorno, porem queria ter o controle de colocar qual palavra o callback do ( js ) iria verificar ... entenderam?

 

Alguém tiver uma solução agradeceria mesmo.

 

Valeu B)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sugiro você separe a validação do php. Veja bem, sua validação é simples, não existe regras complexas por detrás do sistema.

 

Realize essa validação no javascript e, após validado, realize o polling no php. Vai ser mais rápido, pois não utiliza PHP, nem requisição HTTP para validação e nem precisará tratar os dados retornados pelo php.

 

A alteração é ainda mais simples, basta adicionar uma linha no javascript:

if(numero.length > 0 ) {
  /** código javascript **/
}

 

Entretanto, sua função submit (da jquery) necessita possuir return false ao final do código, pois senão, o formulário sempre será submetido. Além do que, quando realizado operações ajax, as funções não seguem mais uma hierarquia convencional.

 

por exemplo:

function submit() {
  $.ajax(/** código ajax **/);
  alert('lol');
}

 

O alert, muito provavelmente aparecerá antes de a função ajax dar ser totalmente executada. Existe uma opção para manter a sincronia, mas já foi dito que será desabilitado em novas versões.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi, minha idéia seria algo +/- desse gênero abaixo...

 

# metodologia #

 

# PHP #

 


<?php

// campos

$numero=$_POST['numero'];

// verificar campos

if(empty($numero) OR !isset($numero))
{

$res=1; // aqui ele define o $res == 1

echo @$msg = "Informe o NÚMERO do passaporte<br>";

}

// numero foi preenchido

if($res == 0) // se o $res == 0, ele verá que nao tem erro algum e executa como OK
{

echo "NÚMERO, OK";      

}

 

 

# JS #

 


$(function($) {

$("#formulario").submit(function() {

var numero = $("#numero").val();

$.post('processar.php', {numero: numero}, 


                               function(resposta) {

                               // verifica se o $res do PHP == 1
                               if (resposta == 1) {

                               $("#erro").fadeIn(); // mostra div erro
                               $("#erro").html(resposta); // mostra os ECHO que possuem o $res == 1 na div

                               } else { // sem error

                               $("#numero").val(""); // limpa o campo
                               $("#erro").fadeOut(); // retira div erro

                               }



});
});
}); // end function ativa


 

 

# Conseguiu entender?

 

- Ele iria retornar no Callback do JS que se o

 $res == 1 

ele iria executar e mostrar todos os ECHO onde possuem no PHP

 $res == 1 

.

 

- Dessa forma eu conseguiria controla os ECHO internos do PHP e quando o

 $res == 0 

, ele mostraria os ECHO somente que fossem

 $res != 1 

onde seriam

 $res == 0 

.

 

 

Seria +/- isso, eu realmente não quero

 alert(); 

do JS e nem pegar o total de caracteres de ( x ) campo pelo JS

if(numero.length > 0 ) {
  /** código javascript **/
} 

 

 

- Porque meio que eu estaria trabalhando +/- em tempo real com a requisição interna do PHP, pois caso eu verifique esse número para consultar se o mesmo é válido, eu terei o retorno na HORA por meio do

 $res == 1 

quando efetuar a consulta, assim terei sempre controle nesse item.

 

 

Alguma solução....

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.