Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
>
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...
>
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:
>
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... :(
>
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. ^_^
>
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...
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:>
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
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.
Ainda nada :(
Que m****!
Estou tentando de tudo aqui!
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:
E caso não funcione, dê um var_dump($nome_da_var) e cole aqui pra poder te ajudar melhor.
:thumbsup: