Ir para conteúdo

POWERED BY:

Arquivado

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

rob.coutinho

Ajax, é tudo isso?

Recommended Posts

Galera, tomei uma atitude drástica. Estou realmente mto enrolado depois que coloquei Ajax em um projeto. Até então, por tudo que li, achei que essa linguagem seria a chave pro paraíso mas tem sido justamente o contrário. E o problema é simples, vou resumir na seguinte url:

 

http://www.abraphiset.com.br/Pagina_01.php

 

Pois bem, ao acessarem essa url, vocês verão um link "clique aqui". Esse link chama a função Ajax que retorna um pequeno Form. Clicando em "Enviar" esse pequeno form envia os dados para uma terceira página que TEORICAMENTE deveria recuperar o valor do campo. E essa é a questão. Por que não consigo fazer isso? Depois de tantos problemas tenho dúvidas como:

 

O Ajax serve só pra exibir textos?

Eu não posso criar campos por ele?

Pensei que quando agente alterasse um conteúdo com o innerHTML o conteúdo da página fosse REALMENTE alterado mas não é isso que acontece, porque?

É possível acrescentar partes de formulários ou alterá-las pelo Ajax?

O que estou fazendo de tão errado galera?

 

Preciso de uma atenção porque não sei se meu problema é simples demais, ou se eu estou engando quanto ao que disse pois pra mim, até agora, o Ajax não é nem 1/3 de td que li por aí. Alías, o código Ajax foi tirado de um tutorial aqui do IMasters inclusive! Mais simples impossível. Agora só quero saber se é possível fazer o que estou tentando fazer. Com o Ajax embutir um campo na página e depois mandar seu valor pra outra página.

 

Estou passando abaixo link para as páginas .PHP para quem quiser dar uma olhada mas já adianto, é o mesmo script disponível em tantos sites, inclusive aqui no IMasters. O que fazer?

 

Ah, já tentei criar os campos pelo DOM, e até consegui, mas não sei se fiz algo errado mas nem assim eu consigo fazer o que estou querendo.

 

Obrigado a todos desde já e conto com mta colaboração e sorte, é td que tô precisando para além de entender melhor essa nova tecnologia que é o Ajax, concordar com td que falam dela pois para mim até agora, só tive um retorno com esses recursos: Projetos em Atraso.

 

Obrigado por toda e qualquer ajuda.

 

Link para download das paginas: http://www.abraphiset.com.br/problemAjax.zip

Compartilhar este post


Link para o post
Compartilhar em outros sites

O Ajax serve só pra exibir textos?

não. na verdade ajax nao é só criar texto enviar pra uma pagina por meio de XMLHttpRequest e receber uma resposta.Mas sim qualquer interação do servidor com o cliente

Eu não posso criar campos por ele?

pode.

Pensei que quando agente alterasse um conteúdo com o innerHTML o conteúdo da página fosse REALMENTE alterado mas não é isso que acontece, porque?

pois é javascript, voce altera pra 'mostrar' pro usuario e tudo isso é feito pelo proprio browser dele

É possível acrescentar partes de formulários ou alterá-las pelo Ajax?

sim

O que estou fazendo de tão errado galera?

voce adicionou a pagina 2 na div, mas nao a pagina 3, por isso que ela aparece separada.

no caso teria que fazer uma nova requisição e inserir o conteudo da resposta na div novamente. e nao aparece o valor do texto colocado no formulario porque simplesmente voce manda exibir o conteudo de outra variavel. o campo do formulario tem nome texto e nao teste.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera, tomei uma atitude drástica. Estou realmente mto enrolado depois que coloquei Ajax em um projeto.

 

achei que essa linguagem seria a chave pro paraíso

 

não sei se meu problema é simples demais, ou se eu estou engando quanto ao que disse pois pra mim, até agora, o Ajax não é nem 1/3 de td que li por aí.

 

Alías, o código Ajax foi tirado de um tutorial aqui do IMasters inclusive!

Cara, sinceramente, você começou errado. Não existe uma solução milagrosa que vai te ajudar em tudo. Primeiro você tem de entender seu problema e depois entender as possíveis soluções encontradas para ele. Se você não sabe o que é Ajax(a linguagem é javascript) e começa a utilizar em um sistema desta maneira, logicamente vai se enrolar.

 

Você não pode colocar a culpa dos projetos em atraso nisto. É a mesma coisa que colocar um prazo para um projeto já sabendo a tecnologia que você vai utilizar e de repente mudar tudo para o que nunca usou. Logicamente vai atrasar.

 

Eu sinceramente sugiro que você primeiro estude a tecnologia, faça pesquisas entenda o que ela faz, veja se te ajuda e depois comece a utilizar em projetos. Não é porque falam muito que Ajax vai ser a melhor opção em todos os lugares.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Galera, primeiramente obrigado por todas as respostas e pela ajuda. Aceito as críticas e realmente reconheço que para o que eu estava fazendo, e pelo o que eu estava querendo, não optei pela melhor tecnologia. Mas uma coisa realmente eu não retiro, o fato de não conseguir fazer a recuperação de um valor qualquer de um input text criado via Ajax.

 

Basta dizer o seguinte exemplo. Tenho um form onde uma das partes é a que segue:

 

<select name="idEntidade" class="cmp_dropdown1" id="idEntidade" onchange="java script:carregaAjax('carregaAjax.php','selecionaCampus','id_entidade',window.document.getElementById('idEntidade').value)">

<option value="">Selecione...</option>

<?

if(mysql_num_rows($cmdEntidade) > 0){

while($arrayEntidade = mysql_fetch_array($cmdEntidade)) {

if($arrayEntidade["nome_fantasia"] != ""){

$txtNomeEntidade = $arrayEntidade["nome_fantasia"];

}else{

$txtNomeEntidade = $arrayEntidade["nome_razao"];

}

?>

<option value="<? echo $arrayEntidade["id_entidade"]; ?>"><? echo $txtNomeEntidade; ?></option>

<?

}

}

?>

</select>

 

Como vocês podem ver, esse primeiro Dropdown tem uma função no evento onChange que chama a função java script:

 

function openAjax() {

var Ajax;

try {Ajax = new XMLHttpRequest(); // XMLHttpRequest para browsers mais populares, como: Firefox, Safari, dentre outros.

}catch(ee) {

try {Ajax = new ActiveXObject("Msxml2.XMLHTTP"); // Para o IE da MS

}catch(e) {

try {Ajax = new ActiveXObject("Microsoft.XMLHTTP"); // Para o IE da MS

}catch(e) {Ajax = false;

}

}

}

return Ajax;

}

 

 

function carregaAjax(pagina, alvo, param1 , param2) {

if(document.getElementById) { // Para os browsers complacentes com o DOM W3C.

var exibeResultado = document.getElementById(alvo); // div que exibirá o resultado.

var Ajax = openAjax(); // Inicia o Ajax.

Ajax.open("GET", pagina+"?"+param1+"="+param2, true); // fazendo a requisição

Ajax.onreadystatechange = function()

{

if(Ajax.readyState == 1) { // Quando estiver carregando, exibe: carregando...

exibeResultado.innerHTML = "<img src='loading.gif'>";

}

if(Ajax.readyState == 4) { // Quando estiver tudo pronto.

if(Ajax.status == 200) {

var resultado = Ajax.responseText; // Coloca o retornado pelo Ajax nessa variável

resultado = resultado.replace(/\+/g," "); // Resolve o problema dos acentos (saiba mais aqui: http://www.plugsites.net/leandro/?p=4)

resultado = unescape(resultado); // Resolve o problema dos acentos

exibeResultado.innerHTML = resultado;

} else {

exibeResultado.innerHTML = "Erro: .";

}

}

}

Ajax.send(null); // submete

}

}

 

Que por sua vez chama a página com o seguinte código:

 

<?

session_start();

include("conn.php");

 

//set IE read from page only not read from cache

header ("Expires: Mon, 26 Jul 2010 05:00:00 GMT");

header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");

header ("Cache-Control: no-cache, must-revalidate");

header ("Pragma: no-cache");

 

header("content-type: application/x-javascript; charset=iso-8859-1");

 

$id_entidade = $_REQUEST["id_entidade"];

$cmdEntidadeCampus = mysql_query("select * from entidades_campus where id_entidade = '".$id_entidade."'");

 

if(mysql_num_rows($cmdEntidadeCampus) > 0){

echo "<select name=\"idEntidadeCampus\" class=\"cmp_dropdown1\" id=\"idEntidadeCampus\">\n";

echo "<option value=\"\">Selecione...</option>\n";

while($arrayEntidadeCampus = mysql_fetch_array($cmdEntidadeCampus)) {

echo "<option value=\"".$arrayEntidadeCampus["id_entidadeCampus"]."\">".$arrayEntidadeCampus["campus"]."</option>\n";

}

echo "</select>\n";

}

?>

 

 

Essa função substitui o seguinte código no Html:

 

<div id="selecionaCampus">

<select name="idEntidadeCampus" class="cmp_dropdown1" id="idEntidadeCampus">

<option value="">Selecione a Entidade...</option>

</select>

</div>

E substitui! Mas quando envio o form para a página que fará o processamento dos dados inseridos no formulário, o valor do segundo dropdown não vem!

 

Código da página que recebe esse valor:

 

$idEntidadeCampus = $_REQUEST["idEntidadeCampus"];

echo "Valor retornado: ".$idEntidadeCampus;

 

Aí eu pergunto, qual o mistério nisso? E o que estou fazendo de errado? Vi que tinham coisas no código anterior erradas mas foi porque estava mudando eles de tanto tentar. Mas o fato é que:

 

1º) Ao invés de mudar o form pelo Ajax, usei DIVs e pelo Javascript mostro ou oculto elas.

2º) Limitei o Ajax para mudar única e exclusivamente o segundo dropdown.

E nem assim consigo, ao enviar o form, recuperar o valor do campo idEntidadeCampus na página posterior. Qual o erro nesse código super simples? E realmente é possível criar campos dinâmicos com o Ajax que é uma ferramenta mto boa mas, e pra recuperá-los em outras páginas após um Submit?

 

Alguém me aponte o que está errado nesse código que é o correto e o que estou usando. Apenas não estou conseguindo recuperar os dados desse bendito campo.

 

Vlw por toda a ajuda! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

rob.coutinho, tentei olhar rápidamente o código e não achei nada. Deve ser o horário hehe

Mas é o seguinte, creio não estar no ajax em si o erro, pois se o campo foi renderizado corretamente, então você pode enviar ele sim.

Eu mesmo uso ajax para carregar vários formulários padrões em diferentes lugares do sistema e dá certinho. No botão submit se você pedir para ver o valor do combobox por um alert, ele mostra o valor correto?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bruno, concordo, o horário é cruel.

 

Mas cara, nao tinha me atentado a essa possibilidade. Fiz o alert no Submit e ele realmente mostra o valor. Agora como explicar isso amigo? Se ele tá com o valor, por que não consigo recuperá-lo na outra página?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, sou muito iniciante neste tal de ajax (rsrs) mas olha, tenta fazer o seguinte, quando for enviar os dados do formulário, primriro recupere os valores do formulário em uma função do JS e passe (se puder no seu caso) por get, pois ai não tem erro. além disso, se recupera o dado em um alert é provavel que exista um erro que não deixa passar o valor para outra página. nem olhei o código, mas acho que deves tentar isso

Compartilhar este post


Link para o post
Compartilhar em outros sites

formulário da página está como post, como você está recebendo o dado na pagina03 ?

teu erro ta ae.

e sim,

 

pegando um XML como resposta você usa do JS pra mudar o site inteiro

imagine

<pagina>
 <titulo>asdadsasd</titulo>
 <menu>
	<item>asdasd</item>
	<item>asdasd</item>
	<item>asdasd</item>
 </menu>
 <conteudo>
	<banners>
	   <banner>asdasdads</banner>
	   <banner>asdasdads</banner>
	   <banner>asdasdads</banner>
	   <banner>asdasdads</banner>
	 </banners>
 </conteudo>
</pagina>
com essa resposta você ja pode mudar bastante coisa..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera, obrigado pelas resposta, mas fiz quase igual um amigo daqui sugeriu.

 

Para cada campo que poderia ser criado pelo Ajax, criei um campo oculto com nome semelhante. Por ex:

 

O ajas criacia o campo: nome_entidade

 

Eu criei um campo chamado: oc_nome_entidade

 

Assim, pela função JS, eu verificava se o campo nome_entidade existia, validava ele, e estando tudo ok, jogava o valor dele no campo oculto.

 

Foi assim que resolvi o problema.

 

Isso me parece puro POG (Programação Orientada à Gambiarras) mas, deu certo e se deu certo, tá certo, não é vero? kkkkkkkkkkkkkkk

 

Obrigado à todos 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.