Ir para conteúdo

POWERED BY:

Arquivado

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

Buthy

Problema com Ajax

Recommended Posts

Então galera,

Criei um sistema de enquetes, e na hora de votar gostaria de fazer com que quando a pessoa vote, ele já carregue uma mensagem abaixo "voto confirmado"... E daí se a pessoa clicar em "ver resultados", iria chamar um arquivo resultado.php que iria exibir os resultados...

 

A parte de exibir a mensagem do voto confirmado está funcionando...

E a parte de carregar o resultado.php dentro da div funcionava, mas depois de fazer o de exibir a mensagem parou de funcionar...

 

Segue os códigos:

 

ajax.js

function GetXMLHttp() {
   if(navigator.appName == "Microsoft Internet Explorer") {
       xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
   }
   else {
       xmlHttp = new XMLHttpRequest();
   }
   return xmlHttp;
}

 

instrucao.js

function abrirPag(valor){
var url = valor;

xmlRequest.open("GET",url,true);    
xmlRequest.onreadystatechange = mudancaEstado;
xmlRequest.send(null);

if (xmlRequest.readyState == 1) {
	document.getElementById("enquete-ajax").innerHTML = "<img src='images/loader.gif'>";
}

return url;
}


function mudancaEstado(){
if (xmlRequest.readyState == 4){
	document.getElementById("enquete-ajax").innerHTML = xmlRequest.responseText;
}
}


$(function($) {
   $("#form-enquete").submit(function() {
   var id_enquete = $("#id_enquete").val();
   var op = $("#op").val();
   $("#status").html("<img src='images/loader.gif' alt='Enviando...' />");
   $.post('../enquete/votar.php', {id_enquete: id_enquete, op: op}, 
   function(resposta) {
           $("#status").slideDown();
           if (resposta != false) {
               $("#status").html("Você não pode votar duas vezes no mesmo dia!");
           } 
           else {
               $("#status").html("Seu voto foi computado com sucesso!");
           }
       });
   });
});

 

formulario.php

<div id="enquete-ajax">

				<form method="post" action="javascript:func()" id="form-enquete">

					<input type="hidden" name="id_enquete" id="id_enquete" value="$id" />

					<p><input type="radio" name="op" id="op" value="op1">Opcao 1</p>
					<p><input type="radio" name="op" id="op" value="op2">Opcao 2</p>
					<p><input type="radio" name="op" id="op" value="op3">Opcao 3</p>
					<p><input type="radio" name="op" id="op" value="op4">Opcao 4</p>
					<p><input type="radio" name="op" id="op" value="op5">Opcao 5</p>

					<p>
						<input type="submit" value="Votar">
						<a href="#enquete" onclick="abrirPag('enquete/resultado.php?id_enquete=$id');">Ver resultado</a>
					</p>

				</form>

				<div id="status" style="display: none;"></div>

			</div> <!-- enquete-ajax -->

 

Alguém sabe o que pode ser?

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok.

 

--- Aqui ---

 

<a href="#enquete" onclick="abrirPag('enquete/resultado.php?id_enquete=$id');">Ver resultado</a>

 

Observe o $id, em momento algum você está imprimindo essa variável.

 

Troque por isso:

 

<a href="#enquete" onclick="abrirPag('enquete/resultado.php?id_enquete=' + <?php echo $id ?>);">Ver resultado</a>

 

E caso não funcione, dê um var_dump($nome_da_var) e cole aqui pra poder te ajudar melhor.

 

:thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok.

 

--- Aqui ---

 

<a href="#enquete" onclick="abrirPag('enquete/resultado.php?id_enquete=$id');">Ver resultado</a>

 

Observe o $id, em momento algum você está imprimindo essa variável.

 

Troque por isso:

 

<a href="#enquete" onclick="abrirPag('enquete/resultado.php?id_enquete=' + <?php echo $id ?>);">Ver resultado</a>

 

E caso não funcione, dê um var_dump($nome_da_var) e cole aqui pra poder te ajudar melhor.

 

:thumbsup:

 

Então cara, ali está imprimindo sim.. Eu só alterei o código na hora de postar aqui...

 

O que acontece é que nem vai para a página resultado.php...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então cara, ali está imprimindo sim.. Eu só alterei o código na hora de postar aqui...

 

O que acontece é que nem vai para a página resultado.php...

 

Como assim? Nem vai para a página de resultado? Ela não abre?

 

function abrirPag(valor){
       var url = valor;

       xmlRequest.open("GET",url,true);    
       xmlRequest.onreadystatechange = mudancaEstado;
       xmlRequest.send(null);

       if (xmlRequest.readyState == 1) {
               document.getElementById("enquete-ajax").innerHTML = "<img src='images/loader.gif'>";
       }

       return url;
}

 

Não entendi o que você fez. Você deveria voltar com um

xmlRequest.responseText

e não simplismente retornar a URL novamente que você passou por parâmetro.

 

:upset:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como assim? Nem vai para a página de resultado? Ela não abre?

 

function abrirPag(valor){
       var url = valor;

       xmlRequest.open("GET",url,true);    
       xmlRequest.onreadystatechange = mudancaEstado;
       xmlRequest.send(null);

       if (xmlRequest.readyState == 1) {
               document.getElementById("enquete-ajax").innerHTML = "<img src='images/loader.gif'>";
       }

       return url;
}

 

Não entendi o que você fez. Você deveria voltar com um

xmlRequest.responseText

e não simplismente retornar a URL novamente que você passou por parâmetro.

 

:upset:

 

substituir o return url; por isso?

Se for, ainda não funcionou... :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

substituir o return url; por isso?

Se for, ainda não funcionou... :(

 

Não, você não entendeu.

 

Observe a sua função, beleza, você da o valor da URL para a função e retorna o mesmo valor !

Não tem sentido algum, se você retornasse algo. Sei lá, uma Janela aberta com os resultados , e não somente a mesma URL...

 

Envie o seu código PHP para que eu possa dar uma verificada. ^_^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, você não entendeu.

 

Observe a sua função, beleza, você da o valor da URL para a função e retorna o mesmo valor !

Não tem sentido algum, se você retornasse algo. Sei lá, uma Janela aberta com os resultados , e não somente a mesma URL...

 

Envie o seu código PHP para que eu possa dar uma verificada. ^_^

 

O resultado.php seria esse:

 

<?php

$id_enquete = $_GET['id_enquete'];

$sql = mysql_query("SELECT * FROM enquete WHERE id_enquete = '$id_enquete'");
$row = mysql_fetch_array($sql);

$sql_enquete_resultado = mysql_query("SELECT * FROM enquete_voto WHERE id_enquete = '$id_enquete'");
$total_votos = mysql_num_rows($sql_enquete_resultado);

$i = 0;
// inicio da listagem de opcoes
for ($i = 1; $i <= 5; $i++) { 
$op = 'op'.$i;
echo $row['op'.$i.'_enquete'];

$sqlop = mysql_query("SELECT * FROM enquete_voto WHERE id_enquete = '$id_enquete' AND voto = '$op'");
$total_op = mysql_num_rows($sqlop);

$porcentagem_op = 0;
if ($total_votos != 0){
	$porcentagem_op = ($total_op * 100) / $total_votos;
}
$largura_op = 0;
if ($total_votos != 0){
	$largura_op = (150 / 100) * number_format($porcentagem_op, 2);
}
?>
<div class="<?php echo $op; ?>-1"></div>
<div class="<?php echo $op; ?>-2" style="width:<?php echo $largura_op; ?>px;"></div>
<div class="<?php echo $op; ?>-3"></div>
<div class="op-res"><?php echo number_format($porcentagem_op, 2); ?> %</div>
<?php
}
?>

 

Mas o que acontece é que ele nem chega a ser carregado...

O ajax não está carregando ele dentro da div enquete-ajax...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, ele não muda pelo que te falei.

 

Você debugou o seu Javascript? Você está enviando o .readyState 1 depois de enviar os dados.

 

Tenta assim

 

function abrirPag(valor){
       var url = valor;

       xmlRequest.onreadystatechange = function()
       {
            if (xmlRequest.readyState == 1) {
               document.getElementById("enquete-ajax").innerHTML = "<img src='images/loader.gif'>";
            }else if (xmlRequest.readyState == 4 && xmlRequest.status == 200){
               document.getElementById("enquete-ajax").innerHTML = xmlRequest.responseText;
            }
       }
       xmlRequest.open("GET",url,true);
       xmlRequest.send(null);

       return false;
}

 

:thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, ele não muda pelo que te falei.

 

Você debugou o seu Javascript? Você está enviando o .readyState 1 depois de enviar os dados.

 

Tenta assim

 

function abrirPag(valor){
       var url = valor;

       xmlRequest.onreadystatechange = function()
       {
            if (xmlRequest.readyState == 1) {
               document.getElementById("enquete-ajax").innerHTML = "<img src='images/loader.gif'>";
            }else if (xmlRequest.readyState == 4 && xmlRequest.status == 200){
               document.getElementById("enquete-ajax").innerHTML = xmlRequest.responseText;
            }
       }
       xmlRequest.open("GET",url,true);
       xmlRequest.send(null);

       return false;
}

 

:thumbsup:

 

Nada :S

 

Não sei se talvez não é uma incompatibilidade com o script que faz a votação...

Mas não estou conseguindo achar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dá, como sou burro.

 

Eu esqueci que você não passou o objeto XHR para a variável assim...

 

function abrirPag(valor){
       var url = valor;
       // Pega o objeto XHR
       var xmlRequest = new GetXMLHttp();
       xmlRequest.onreadystatechange = function()
       {
            if (xmlRequest.readyState == 1) {
               document.getElementById("enquete-ajax").innerHTML = "<img src='images/loader.gif'>";
            }else if (xmlRequest.readyState == 4 && xmlRequest.status == 200){
               document.getElementById("enquete-ajax").innerHTML = xmlRequest.responseText;
            }
       }
       xmlRequest.open("GET",url,true);
       xmlRequest.send(null);

       return false;
}

 

Agora vai.

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.