Foros del Web » Programando para Internet » Javascript » Frameworks JS »

ajax solo recarga cuando quiere

Estas en el tema de ajax solo recarga cuando quiere en el foro de Frameworks JS en Foros del Web. Bueno, quizás no es exactamente eso. Aunque la verdad es que en algún momento del desarroio de mi aplicación conseguí que, justo después de votar ...
  #1 (permalink)  
Antiguo 02/02/2010, 02:32
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 11 meses
Puntos: 2
ajax solo recarga cuando quiere

Bueno, quizás no es exactamente eso. Aunque la verdad es que en algún momento del desarroio de mi aplicación conseguí que, justo después de votar una noticia, se refrescase sólo ese div y me aparecieran los votos que había dado.

Actualmente hay que refrescar manualmente la página para que aparezca y, la verdad, estoy tan saturada ia que no se me ocurre la manera de retomar el tema.

Os explico como va el módulo a ver si me podeis echar un cable:

En primer lugar tengo el div con las estrellitas que, por medio de estilos, se iluminan con el evento :hover y se ponen amarillas conforme se va votando. Este es el código.
Código:
<div >
	<ul class='star-rating'>");
	$conexion = conectar();
	$consulta = "SELECT Count(*), Sum(nota) FROM noticia_voto WHERE id_noticia = ".$row_noticia['0']."";							
	$resultado = mysql_fetch_row(mysql_query($consulta, $conexion));
	mysql_close($conexion);
	if($resultado[0] != 0)
	{
		$media = $resultado[1]/ $resultado[0];
		$redondeo = round($media, 2);
		$ancho = $redondeo * 25;
	}
	else
		$ancho = 0;
	echo utf8_encode("<li id='estrellitas' class='current-rating' style='width:".$ancho."px'><span>-</span></li>
	<li><a href ='javascript:Votar(\"$ip\", ".$row_noticia['0'].", 1);' title='No me gusta nada (1 estrella sobre 5)' class='one-star'><span>1</span></a></li>
<li><a href='javascript:Votar(\"$ip\", ".$row_noticia['0'].", 2);' title='Me gusta poco (2 estrellas sobre 5)' class='two-stars'><span>2</span></a></li>
	<li><a href='javascript:Votar(\"$ip\", ".$row_noticia['0'].", 3);' title='Aceptable (3 estrellas sobre 5)' class='three-stars'><span>3</span></a></li>
	<li><a href='javascript:Votar(\"$ip\", ".$row_noticia['0'].", 4);' title='Está bien (4 estrellas sobre 5)' class='four-stars'><span>4</span></a></li>
	<li><a href='javascript:Votar(\"$ip\", ".$row_noticia['0'].", 5);' title='Me gusta mucho (5 estrellas sobre 5)' class='five-stars'><span>5</span></a></li>
	</ul>
	</div>
	<div id='txt_voto' style='color: red; text-align:center; width:200px; visibility:hidden'></div>
Este módulo accede primero a votacion_ajax.js, que a su vez iama a votacion_ajax.php para hacer la inserción en la bd. Pero creo que solo va a hacer falta que os muestre su parte correspondiente del .js

Código:
function Votar(cod_usuario, cod_noticia, nota){

	document.getElementById("txt_voto").style.visibility = "visible";
	if(cod_usuario == undefined){
		alert("Error: se esperaba un código de usuario");
		return;
	}

	if(cod_noticia == undefined){
		alert("Error: se esperaba un código de noticia");
		return;
	}

	if(nota == undefined){
		alert("Error: se esperaba una nota");
		return;
	}

	$.ajax({
		type: "GET",
		url: "votacion_ajax.php",
		data: "action=votar&cod_usuario="+cod_usuario+"&cod_noticia="+cod_noticia+"&nota="+nota,
		success: function(msg){
			document.getElementById("txt_voto").innerHTML = msg;
		}, 
		error: function(xho){
			document.getElementById("txt_voto").innerHTML = "Error:"+xho.responseText;
		}
	});
	
	$.ajax({
		type: "GET",
		url: "votacion_ajax.php",
		data: "action=contar_votos&cod_noticia="+cod_noticia,
		success: function(ancho){
			document.getElementById("estrellitas").style.width = ancho;
		}, 
		error: function(xho){
			
		}
	});
}
Como os decía, todo lo hace bien, incluso me muestra el mensajito en el div txt_voto cuando doy un voto a una noticia cualquiera. Lo que no me hace es refrescarme el div de las estrellitas para que se vea directamente, nada más votar, cómo va el ranking y qué nota ieva.

Podeis orientarme cómo hacerlo?? Gracias.
  #2 (permalink)  
Antiguo 02/02/2010, 07:45
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 15 años
Puntos: 65
Respuesta: ajax solo recarga cuando quiere

Creo q estas usando jQuery, verdad?
Si es asi, no deberias hacer esto en esta parte?

Código Javascript:
Ver original
  1. $.ajax({
  2.         type: "GET",
  3.         url: "votacion_ajax.php",
  4.         data: "action=votar&cod_usuario="+cod_usuario+"&cod_noticia="+cod_noticia+"&nota="+nota,
  5.         success: function(msg){
  6.             $("txt_voto").html(msg);
  7.         },
  8.         error: function(xho){
  9.             $("txt_voto").html("Error:"+xho.responseText);
  10.         }
  11.     });
__________________
HV Studio
Diseño y desarrollo web
  #3 (permalink)  
Antiguo 02/02/2010, 11:55
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 11 meses
Puntos: 2
Respuesta: ajax solo recarga cuando quiere

Hola jackson666.

Creo que me he perdido. Sí, uso jquery y lo que tú dices, aunque de otra forma, lo hago y el texto me lo imprime perfectamente en el div txt_voto.

Lo que no me hace bien es la segunda funcion a la ka iamo, la de contar votos para darle el ancho a las estrellitas y que me aparezca directamente el nuevo valor(o sea, las estrellitas coloreadas de la forma correspondiente al nuevo voto).

Gracias!!
  #4 (permalink)  
Antiguo 02/02/2010, 14:40
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 15 años
Puntos: 65
Respuesta: ajax solo recarga cuando quiere

aaa! no lo habia visto jajaja

Suponiendo que solo devuelves un numero, creo que te falto la unidad de medida!

Código Javascript:
Ver original
  1. success: function(ancho){
  2.             document.getElementById("estrellitas").style.width = ancho+'px';
  3.         }
__________________
HV Studio
Diseño y desarrollo web
  #5 (permalink)  
Antiguo 02/02/2010, 14:56
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 11 meses
Puntos: 2
Respuesta: ajax solo recarga cuando quiere

Que va chico, lo he probado como tú dices y tengo que pulsar igualmente la tecla f5 para ver las estrellitas coloreadas :(

Gracias de todos modos por tu respuesta.
  #6 (permalink)  
Antiguo 03/02/2010, 01:33
Avatar de aniMAYtions  
Fecha de Ingreso: diciembre-2007
Ubicación: Granada
Mensajes: 519
Antigüedad: 16 años, 11 meses
Puntos: 2
Respuesta: ajax solo recarga cuando quiere

Bueno, quería comentaros que hay cambios en la situación.
Resulta que el módulo de las noticias, aparte del submódulo de las votaciones ieva otro submódulo de comentarios.
Como habreis visto en el código que os he escrito, intenté implementarlo de la misma forma que las votaciones para que, al introducir un comentario, se autoactualizase el panel de visualización de los comentarios sin tener que refrescar la página.
Pues al parecer eso es lo que me estaba dando problemas.
En el código que os puse no he tenido que cambiar nada, pero en el script de votacion_ajax.php(el que contiene las funciones a las que se iama en el .js) he comentado una función a ver qué pasaba, y a que lo adivinais? vuelve a funcionar completamente el módulo de las estrellitas(se autorefresca), pero ia no se cómo hacer para que se me autorefresque el módulo de los comentarios cada vez que se inserte uno nuevo sin tener que refrescar toda la página.
Os muestro el código que he modificado a ver si le veis el faio.

Código:
case "contar_votos":
			$cod_noticia = htmlspecialchars($_GET["cod_noticia"]);
			$consulta = "SELECT Count(*), Sum(nota) FROM noticia_voto WHERE id_noticia = ".$cod_noticia."";
			$conexion = conectar();
			$resultado = mysql_query($consulta, $conexion);
			mysql_close($conexion);
			$fila = mysql_fetch_row($resultado);
			$media = $fila[1]/ $fila[0];
			$redondeo = round($media);
			$ancho = $redondeo * 25;
			echo"$ancho";
			return;
		break;
//////////////////////////////////////////////////////////////////////////////////////////////////		
		/*case "comentar":
			$usuario = htmlspecialchars($_GET["cod_usuario"]);
			$noticia = htmlspecialchars($_GET["cod_noticia"]);
			$nombre = htmlspecialchars($_GET["nombre"]);
			$email = htmlspecialchars($_GET["email"]);
			$comentario = htmlspecialchars($_GET["comentario"]);
			$consulta = "Insert Into comenta_noticia(id_noticia, comentario, nombre_usuario, email_usuario, ip_usuario, fecha_comentario) values($noticia, $comentario, $nombre, $email, $usuario, CURRENT_TIMESTAMP)";
			$conexion = conectar();
			if(mysql_query($consulta, $conexion))
			{
				echo"bien, se inserto el comentario!!";
				return;
			}
			else
			{
				echo"Ocurrió un fallo al insertar el comentario.<br/>Por favor, vuelva a intentarlo pasados unos minutos.";
				return;
			}
			
		break;*/
Veis? lo que he comentado es lo que, al parecer, me impedía el autorefresque del módulo de las estrellitas...

Un saludo!!

Etiquetas: ajax, cuando, recarga
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:20.