PHP - isset no trabaja con JQuery

 
Vista:

isset no trabaja con JQuery

Publicado por Damian (62 intervenciones) el 15/10/2014 16:49:25
Hola estaba viendo porque no me funciona el JQuery y me doy cuenta que el problema está al poner en php por ejemplo:
1
if (isset($_POST['Aceptar'])){}
ya que si le saco ese if o isset el JQuery funciona, quiero decir no me refresca toda la página.

Les paso un ejemplo sencillo que estoy probando. Pongo dónde está el código de php y el JavaScript, todo se hace en la misma página (pier.php):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
		echo "<form id='frJgo' method='post' action=''>";
   		echo "<div id='txtRes'>Usuario. ¿Desea empezar a jugar ahora?";
   		echo "<br>";
   		echo "<input type='submit' name='Aceptar' id='Aceptar' value='Si'>&nbsp;&nbsp;";
   		echo "<input type='submit' name='Cancelar' id='Cancelar' value='Ahora no'></div>";
		echo "</form>";
 
             //en este if nunca entra, si lo comento el JQuery trabaja perfectamente
		if (isset($_POST['Aceptar'])){
   		echo "<div id='txtref'>Usuario <span style='color:#036'>fulano</span> autenticado correctamente. ¿Desea empezar a jugar ahora?";
   		echo "<br><h2 class='NroPreg' id='crono'>00:00:00</h2><br>";
   		echo "<input type='submit' name='Jugar' id='Aceptar' value='Si'>&nbsp;&nbsp;";
   		echo "<input type='submit' name='No' id='Cancelar' value='Ahora no'></div>";
		}
?>
 
<script type="text/javascript"><!--
$().ready(function(){
//$("#txtref").hide();
$("#frJgo").submit(function(e){
		e.preventDefault();
		var dataString = $("#frJgo").serialize();
        //alert('Datos serializados: '+dataString);
        $.ajax({
			url: "pier.php",
            type: "POST",
            data: dataString,
			cache: false,
            success: function(data) {
				$("#txtref").slideDown(600);
            }
        });	
	return false;	
  });
});	
--></script>

Bueno como ya digo, con el if del post no me funciona el JQuery, contrariamente pasa si comento el if, ahí si funciona.
Necesito sí o sí trabajar con ese if (isset($_POST['Aceptar'])){} por qué dentro tengo que hacer varias cosas.
Quiero que se muestre el div de #txtref.

Desde el código de JQuery ya probé sacándole el return false;, lo mismo hice con el e.preventDefault();. Hice todas las combinaciones posibles y no trabaja.
También he probado con $('input#Aceptar').on('click', function() {}, $('#Aceptar').submit(function(){} o bien $('#Aceptar').click(function(){}. Sin resultados tampoco.

¿Por qué no trabaja si está ese isset del if en php? ¿Hay que hacer algo desde JQuery para obtener el $POST de php?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

isset no trabaja con JQuery

Publicado por xve (6935 intervenciones) el 15/10/2014 21:39:30
Hola Damian, la verdad es que no se ver donde puede estar el error...

Lo estoy viendo, y parece que no tiene nada que ver... incluso lo he probado, y me funciona sin problema!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

isset no trabaja con JQuery

Publicado por Damian (62 intervenciones) el 15/10/2014 22:39:41
¿Como que te funciona? Esto me pone peor. ¿Está tal cual te puse el código?, o sea, sin comentar o sacar el if del $_POST. Por que a mi también me funciona, pero sólo si saco ese if que está en php. Los enlaces de javascript (que están en el head) están bien, por qué el JQuery trabaja. No sé que más probar, he realizado de todo e googleado un montón.
¿Será mi máquina? ¿La configuración o versión de php?...no creo porque andar anda el JQuery.

Por este problema no puedo subir mi nueva página al sitio que ya tengo, todo anda perfecto, sólo me falta lo de que no me refresque toda la página. Si hubiera estado en los 90' no habría problema con que este en Internet, pero ahora son otros tiempos. Y sería feísimo ver como en cada interacción del usuario se refresca todo.

Es muy raro que no entre a ese if de php. Ese es el punto clave.

Seguire buscando de todas formas.

Me podrías pasar todo ese código que dices que te funciona...total otra prueba más no me hace nada.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

isset no trabaja con JQuery

Publicado por Damian (62 intervenciones) el 15/10/2014 23:06:41
Para seguir agregando otra curiosidad. Ahora le saqué el 'Aceptar' que está dentro del $_POST y funciona. No entiendo nadaaaaaaaaaa.
En definitiva el JQuery así no anda:
1
2
3
4
5
6
if (isset($_POST['Aceptar'])){
   		echo "<div id='txtref'>Usuario <span style='color:#036'>fulano</span> autenticado correctamente. ¿Desea empezar a jugar ahora?";
   		echo "<br><h2 class='NroPreg' id='crono'>00:00:00</h2><br>";
   		echo "<input type='submit' name='Jugar' id='Aceptar' value='Si'>&nbsp;&nbsp;";
   		echo "<input type='submit' name='No' id='Cancelar' value='Ahora no'></div>";
		}

...y así, sí anda:
1
2
3
4
5
6
if (isset($_POST)){
   		echo "<div id='txtref'>Usuario <span style='color:#036'>fulano</span> autenticado correctamente. ¿Desea empezar a jugar ahora?";
   		echo "<br><h2 class='NroPreg' id='crono'>00:00:00</h2><br>";
   		echo "<input type='submit' name='Jugar' id='Aceptar' value='Si'>&nbsp;&nbsp;";
   		echo "<input type='submit' name='No' id='Cancelar' value='Ahora no'></div>";
		}

Pero aclarar que tuve que esconder en JQuery el div a mostrar ($("#txtref").hide();). De esta forma al cargar la página entra al if y yo sólo quiero que entre al if, justamente cuando se hace click en el botón de Aceptar. Asi que ese $_POST solito no me sirve, porque al cargar la página va a cargar todo lo que está dentro de ese bloque.

¿Que podrá estar pasando?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

isset no trabaja con JQuery

Publicado por xve (6935 intervenciones) el 16/10/2014 08:43:19
Hola Damian, lo unico que yo he hecho ha sido crear este archivo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<!DOCTYPE html>
<html lang="es">
<head>
	<meta charset="utf-8">
	<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
 
	<script>
    $().ready(function(){
        //$("#txtref").hide();
        $("#frJgo").submit(function(e){
            e.preventDefault();
            var dataString = $("#frJgo").serialize();
            //alert('Datos serializados: '+dataString);
            $.ajax({
                url: "pier.php",
                type: "POST",
                data: dataString,
                cache: false,
                success: function(data) {
                    $("#txtref").slideDown(600);
                }
            });
            return false;
        });
    });
    </script>
</head>
 
<body>
 
<?php
        echo "<form id='frJgo' method='post' action=''>";
        echo "<div id='txtRes'>Usuario. ¿Desea empezar a jugar ahora?";
        echo "<br>";
        echo "<input type='submit' name='Aceptar' id='Aceptar' value='Si'>&nbsp;&nbsp;";
        echo "<input type='submit' name='Cancelar' id='Cancelar' value='Ahora no'></div>";
        echo "</form>";
 
             //en este if nunca entra, si lo comento el JQuery trabaja perfectamente
        if (isset($_POST['Aceptar'])){
        echo "<div id='txtref'>Usuario <span style='color:#036'>fulano</span> autenticado correctamente. ¿Desea empezar a jugar ahora?";
        echo "<br><h2 class='NroPreg' id='crono'>00:00:00</h2><br>";
        echo "<input type='submit' name='Jugar' id='Aceptar' value='Si'>&nbsp;&nbsp;";
        echo "<input type='submit' name='No' id='Cancelar' value='Ahora no'></div>";
        }
?>
 
</body>
</html>

Al ejecutarlo, si pulso el botón enviar, me funciona perfectamente... en mi caso, la consola del navegador me da error porque no existe en mi maquina el archivo pier.php, pero funciona!!!

Si puedes, copia este código en un archivo y pruébalo.... ya nos comentaras
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vainas
Val: 34
Ha aumentado su posición en 3 puestos en PHP (en relación al último mes)
Gráfica de PHP

isset no trabaja con JQuery

Publicado por Vainas (262 intervenciones) el 16/10/2014 11:11:33
Buenas:

He estado rebuscando ayer pero siento no haber posteado antes. El tema esta en el serialize() del jquery que segun la documentacion en ingles viene a decir algo asi como que no envia al servidor los submit y creo que tampoco los buttons con lo que si no te llega al servidor el boton submit pues no entra en el codigo.

Hay paginas en ingles que dicen como se soluciona el problema. Te doy lo que pone una de ellas (el codigo no es mio vamos):

1
2
3
4
5
6
var dataString = $("#frJgo").serialize()+ '&' + encodeURI("Aceptar")+ '='+ encodeURI($( "input[name$='Aceptar']" ).val());
$.ajax({
	url: "pier.php",
        type: "POST",
        data: dataString,
// resto de codigo


Lo que hace es agregar al string serializado (dataString) el name y value del boton. Espero que quede claro sino preguntame de nuevo.

Saludos.

Actualizo: Podrias descomentar el alert que tienes en tu codigo y ver si efectivamente no se envia el boton ya que la documentacion esa es de 2010.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

isset no trabaja con JQuery

Publicado por Damian (62 intervenciones) el 16/10/2014 15:20:51
No pasa nada.

1) xve: puse tal cual me pasas el archivo y no trabaja.

2) Vainas: hice tal cual me dices y tampoco trabaja.

Realice algunas modificaciones para ver si lo toma y tampoco.
Probando en la consola web de firefox, pongo un punto de interrupción en el $("#frJgo").submit(function(e) y no hace nada, nunca entra. Luego probe con poner $("#Aceptar").submit(function(e) y tampoco entra a dicho evento. Finalmente lo cambie a $("#Aceptar").click(function(e) y acá si entra y muestra el mensaje del Alert(), pero al ir debugueando línea por línea llega al success: function(data) { y de ahí salta al return false;. Entonces no entra al $("#txtref").slideDown(600); que es lo fundamental.

Voy a probar de subir todo al servidor en donde esta mi sitio, para ver que pasa ahí. Ni idea que puede ser ya.

Les dejo el código completo que tengo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Documento sin título</title>
<link rel="stylesheet" href="jquery-ui-1.11.0/jquery-ui.min.css">
<style type="text/css">
.NroPreg{font-family: "Comic Sans MS", cursive;font-size:18px;color:#036;text-align:center}
#Opc{font-family: "Comic Sans MS", cursive;font-size:14px;text-indent:20px;display:block}
table.gridtable{
}
table.gridtable tr {
}
table.gridtable td {
}
#txtRes, #txtResul, #txtEst, #txtCerrar{text-align:center;background-color:#9F9;margin:15px 0 15px 0;padding:0 5px 5px 5px;border:1px dashed #09C;border-radius:7px}
#txtPreg,#txtref{background-color:#FFC;margin:15px 0 15px 0;padding:0 5px 5px 5px;border:1px dashed #09C;border-radius:7px}
</style>
<script src="jquery-ui-1.11.0/jquery.js"></script>
<script src="jquery-ui-1.11.0/jquery-ui.min.js"></script>
</head>
<body>
<?php
		echo "<form id='frJgo' method='post' action=''>";
   		echo "<div id='txtRes'>Usuario. ¿Desea empezar a jugar ahora?";
   		echo "<br>";
   		echo "<input type='button' name='Aceptar' id='Aceptar' value='Si'>&nbsp;&nbsp;";
   		echo "<input type='submit' name='Cancelar' id='Cancelar' value='Ahora no'>";
		echo "</div>";
		echo "</form>";
 
		if (isset($_POST['Aceptar'])){
   		echo "<div id='txtref'>Usuario <span style='color:#036'> mondinga</span> autenticado correctamente. ¿Desea empezar a jugar ahora?";
   		echo "<br><h2 class='NroPreg' id='crono'>00:00:00</h2><br>";
   		echo "<input type='submit' name='Jugar' id='Aceptar' value='Si'>&nbsp;&nbsp;";
   		echo "<input type='submit' name='No' id='Cancelar' value='Ahora no'></div>";
		}
?>
<script type="text/javascript"><!--
$().ready(function(){
//$("#txtref").hide();
//$("#frJgo").submit(function(e){
//$("#Aceptar").submit(function(e){
$("#Aceptar").click(function(e){	
		e.preventDefault();
		var dataString = $("#frJgo").serialize()+ '&' + encodeURI("Aceptar")+ '='+ encodeURI($( "input[name$='Aceptar']" ).val());
		alert('Datos serializados: '+dataString);
        $.ajax({
			url: "pier.php",
            type: "POST",
            data: dataString,
			cache: false,
            success: function(data) {
				$("#txtref").slideDown(600);
            }
        });	
	return false;	
  });
});	
--></script>
</body>
</html>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

isset no trabaja con JQuery

Publicado por Damian (62 intervenciones) el 16/10/2014 15:57:01
Tendría que haber modificado lo que puse anteriormente, no me dio el tiempo (15 minutos). Donde puse todo esto:
"Probando en la consola web de firefox, pongo un punto de interrupción en el $("#frJgo").submit(function(e) y no hace nada, nunca entra. Luego probe con poner $("#Aceptar").submit(function(e) y tampoco entra a dicho evento. Finalmente lo cambie a $("#Aceptar").click(function(e) y acá si entra y muestra el mensaje del Alert(), pero al ir debugueando línea por línea llega al success: function(data) { y de ahí salta al return false;. Entonces no entra al $("#txtref").slideDown(600); que es lo fundamental.". No lo tengan en cuenta.

Es que no me había dado cuenta (estoy modificando tantas cosas para que funcione) y había puesto el el input de type "button". Así que tendría que ser de tipo "submit". Pero como dije antes el Alert () lo llega a mostrar, pero no entra en el success: function(data) {.
Con el $("#Aceptar").submit(function(e) refresca toda la página.
Con el $("#frJgo").submit(function(e) sólo muestra el Alert () y nada más..del div que está dentro del success ni noticias

Ya lo probé en el servidor y no sucede nada, me pasa lo mismo que localmente. Un desastre...que me queda por hacer. Alguien que me preste una varita mágica.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vainas
Val: 34
Ha aumentado su posición en 3 puestos en PHP (en relación al último mes)
Gráfica de PHP

isset no trabaja con JQuery

Publicado por Vainas (262 intervenciones) el 16/10/2014 20:14:10
Buenas: No tenemos varitas magicas por aqui, solo un poco de logica de vez en cuando, a ver si sale el tema ya que he visto mas errores. Yo creo que tendriamos que partir de quieres hacer y por alli podemos ir avanzando. Mas que nada que veo que

1
2
3
success: function(data) {
				$("#txtref").slideDown(600);
            }

En esta parte del codigo quieres llamar a algo que todavia no esta en el lado del cliente:

1
2
if (isset($_POST['Aceptar'])){
   		echo "<div id='txtref'>Usuario <span style='color:#036'> mondinga</span> autenticado correctamente. ¿Desea empezar a jugar ahora?";

Este codigo anterior aun no esta en el cliente hasta que se envie el form al servidor con lo cual va a dar error.

Explicanos un poco que quieres hacer a ver si te podemos echar un cable.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

isset no trabaja con JQuery

Publicado por Damian (62 intervenciones) el 16/10/2014 23:34:39
Uyyy no me digas que no se puede hacer. Tan ilusionado que estaba y tan bien que me había quedado.

El tema es como ya dije antes, todo me anda perfecto en PHP, pero se refresca todo la página por cada botón que hace click el usuario.

La página, se trata de un juego donde se le van presentando a los usuarios distintas ventanas (de ahí esos divs que están dentro de cada if (isset($_POST['Aceptar'])){) según que botón seleccione.

Hace consultas a la base de datos (las preguntas a responder con opciones a seleccionar), luego guarda la respuesta dada por el usuario al elegir una opción y al apretar "Responder". Después le informa si fue correcta o incorrecta y le muestro dos botones "Próxima pregunta" y "Abandonar". La "Próxima pregunta" vuelve a hacer lo mismo que antes (otra pregunta distinta a la que ya respondió) y "Abandonar" cierra la sesión del usuario y muestra la estadística (aciertos, errorees, etc.)

En definitiva, quiero que esos divs donde el usuario va interactuando se muestren sin refrescar toda la página. ¿Hay alguna otra forma de hacerlo? Cualquier cosa subo todo al servidor y así van viendo de que se trata...y de paso juegan un poco...jajaja
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

isset no trabaja con JQuery

Publicado por Damian (62 intervenciones) el 17/10/2014 15:14:04
Igual Vainas no entiendo porque no puede andar como tu dices (lo del lado del cliente). Si te fijas en el comentario de xve a él le funciono el código y lo copio tal cual se lo pase. O sea entra a ese if de php y por medio de JQuery muestra el div.
Además para que está el ajax y su tipo "POST" y demás, es para el envío del formulario. Yo no puedo poner todas esas ventanas (divs) que se van mostrando así no mas en PHP (sin que estén dentro de algún bloque if), por qué al momento de cargar la página ya empieza a mostrar esos divs. Encima cada div va a tener variables de sesiones que van a ir cargándose (mostrándose) a medida que el usuario haga click en algún botón.
Por eso si o si necesito que se vaya mostrando dentro de cada if en php (cuando el usuario confirma o cancela algo), sólo ahí se presenta el div en cuestión.

Lo último que estuve probando fue esto:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$("#frJgo").submit(function(e){
//$("#Aceptar").submit(function(e){
//$("#Aceptar").click(function(e){	
		e.preventDefault();
		var dataString = $("#frJgo").serialize()+ '&' + encodeURI("Aceptar")+ '='+ encodeURI($("input[name$='Aceptar']").val());
		//alert('Datos serializados: '+dataString);
        $.ajax({
	    url: "pier.php",
            type: "POST",
            data: dataString,
	    cache: false,
	success: function () {
                alert("ajax success!!! ");
		$("#txtref").slideDown(600);
      },
      error: function () {
               alert("ajax error!!!");
      },
      complete: function () {
            // Handle the complete event
            alert("ajax completed!!!");
      }
    });
	return false;
});
Y entra tanto en success: function () como en complete: function (). O sea muestra esos alert(). Y en error: function () no entra. Pero claro del $("#txtref").slideDown(600); ni noticias, como siempre no trabaja.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vainas
Val: 34
Ha aumentado su posición en 3 puestos en PHP (en relación al último mes)
Gráfica de PHP

isset no trabaja con JQuery

Publicado por Vainas (262 intervenciones) el 18/10/2014 19:50:22
Buenas:

Siento no explicarme bien. A lo que me referia es que esto:

$("#txtref").slideDown(600);

No funciona por que no esta aun dentro del html que tiene el cliente. Es cierto que se ejecuta el ajax y es cierto que va por post y que a la vuelta cuando trae los datos entra en la funcion success y despues en la complete. Pero tu traes del servidor este dato:

<div id='txtref'>Usuario <span style='color:#036'> mondinga</span> autenticado correctamente. ¿Desea empezar a jugar ahora?";

que no esta aun en el html del cliente. Tu mision en todo caso seria integrarlo en el html y luego ya mostrarlo como sea.

Yo no puedo poner todas esas ventanas (divs) que se van mostrando así no mas en PHP (sin que estén dentro de algún bloque if), por qué al momento de cargar la página ya empieza a mostrar esos divs.

Esto no es del todo cierto por que podrias ocultarlas por ejemplo e irlas mostrando poco a poco con jquery, pero no te quiero complicar con mas cosas.

Mi planteamiento al codigo podria ser algo asi: Yo necesito ir al servidor preguntando por la pregunta x y sus posibles respuestas, es decir, necesitaria un php que al llamarlo le pudiera pasar la variable "numero de pregunta" (como minimo, luego ya pensariamos en mas datos como las sessiones) y este me traiga todo lo relacionado con la pregunta. En el cliente con jquery puedo crear un div oculto meterle los datos dentro y mostrarlo al cliente de alguna forma. cuando el usuario quiera conocer cual es la respuesta cliente llamo de nuevo con ajax al servidor a que me traiga la respuesta correcta. Lo de no dejar desde el principio en el cliente la respuesta correcta es para que no entren al codigo y la vean. lo de enviar la respuesta del cliente al servidor para traer la correcta es para dejar en el servidor grabado de alguna forma que el cliente ha contestado a esa pregunta con la respuesta a, b, c, d....

Te dejo un ejemplo que me he hecho rapido sobre como yo veo el tema. El codigo es rapido asi que funciona pero habria que mejorar cosas para poder escalar (que se pueda llamar a una segunda pregunta etc etc) pero yo creo que da un poco lo que quiero explicar:

html y javascript:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Juego en ajax</title>
	<script src="js/jquery-1.11.1.js"></script>
	<style>
		.error{
			color:red;
		}
		.acierto{
			color:green;
		}
	</style>
</head>
<body>
	<input id='empezar' type='button' value='Empezar'/>
	<div id='pregunta'></div>
	<script type="text/javascript">
		$(document).ready(function(){
			$("#empezar").click(function(e){
				e.preventDefault();
				$.ajax({
					url: "pregunta.php?num=1",
					type: "get",
					cache: false,
					success: function(data) {
						var $response=$(data);
						$("#pregunta").html($response);
						$("#empezar").hide();
						$("#frJgo").on('submit', function(e) {
							e.preventDefault();
							dataString = $(this).serialize();
							$.ajax({
								url: "respuesta.php",
								type: "POST",
								data: dataString,
								cache: false,
								success: function(data) {
									var $response=$(data);
									// Marcar la respuesta correcta y la que dio el usuario como mala o buena.
									var respuser = $response.filter('#respuser').text();
									var respserver = $response.filter('#respserver').text();
 
									$("input[value='"+respuser+"'] + label").addClass("error");
									$("input[value='"+respserver+"'] + label").addClass("acierto");
									$("#frJgo").off("submit");
									$("input[type='submit']").hide();
									// Cambiar el boton para la siguiente pregunta
									$("#empezar").show();
								}
							});
						});
 
					},
					error: function () {
						alert("ajax error!!!");
					}
				});
			});
		});
	</script>
</body>
</html>

pregunta.php:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
// Conecto a la bbdd y busco la respuesta num.
   if (isset($_GET['num'])){
      switch ($_GET['num']) {
    case 1:
        echo '<form id="frJgo">
                  <label>Esta es la pregunta 1</label><br>
                  <input type="radio" name="resp1" value="resp1">
                  <label>Respuesta 1</label>
                  <br>
                  <input type="radio" name="resp1" value="resp2">
                  <label>Respuesta 2</label>
                  <br>
                  <input type="radio" name="resp1" value="resp3">
                  <label>Respuesta 3</label>
                  <br>
                  <input type="radio" name="resp1" value="resp4">
                  <label>Respuesta 4</label>
                  <br>
                  <input type="submit" value="Enviar">
               </form>';
        break;
    case 2:
        echo "i es igual a 1";
        break;
    case 3:
        echo "i es igual a 2";
        break;
}
 
   }
?>

respuesta.php:
1
2
3
4
5
6
7
8
9
<?php
   if (isset($_POST['resp1'])){
    // Guardo la respuesta que dio el usuario
    // Le envio la respuesta correcta
    $respuser = $_POST["resp1"];
    echo '<div id="respuser">'.$respuser.'</div>';
    echo '<div id="respserver">resp2</div>';
   }
?>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

isset no trabaja con JQuery

Publicado por Damian (62 intervenciones) el 18/10/2014 21:46:21
Hola de nuevo Vainas. Realmente agradezco mucho que te hallas tomado el tiempo para ayudarme y de la manera que lo has realizado.
Pero la verdad me llevo mucho tiempo realizar todo en php como para abordar dicho trabajo. Voy a ver si puedo complementar lo que me pasas con lo que ya tengo y no tener que realizar todo de cero.
En mi caso yo tengo una función que ejecuta siempre el mismo código cada vez que el usuario apreta en "Próxima pregunta", donde le trae una pregunta nueva cada vez. Básicamente es algo así:
1
2
3
4
5
6
7
8
9
10
11
12
if (isset($_POST['Aceptar'])){
			$sql = "INSERT INTO tmp_jdo (CodUser,Activo) VALUES (".$_SESSION['cod'].",1)";
   					if (!mysql_query($sql,$cxn)) {die('Error: ' . mysql_error($cxn));}
		$_SESSION['Cant']=0;
		$_SESSION['Corr']=0;
		$_SESSION['Inco']=0;
		call_user_func('pregunta',false,$cxn,$fecha2);
	  }
 
	 if (isset($_POST['Prox'])){
		call_user_func('pregunta',false,$cxn,$fecha2);
	}

En "Aceptar" es la primera vez que juega y "Prox" cada vez que sigue jugando. Por supuesto que falta el código anterior donde se loguea y demás, como también la función desarrollada ('pregunta').
Encima se me dio por crear un cronómetro que empieza a correr cuando se le presenta la pregunta al usuario, guardando el tiempo que le llevo responder en la BD. Pero al no poder hacer andar desde JQuery dicha ventana, no puedo probarlo.
Quizás mi error sea el de hacer todo en la misma página (.php) y no separarla como tu me dices. Pero me había quedado tan bien...que me da bronca que por JQuery deba cambiar todo.

Voy a seguir buscando para ver si encuentro otra solución que no tenga que cambiar mi código ya realizado en PHP, y así sólo poder tocar la parte de JQuery.

Sinceramente Vainas te agradezco todo lo que me has orientado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vainas
Val: 34
Ha aumentado su posición en 3 puestos en PHP (en relación al último mes)
Gráfica de PHP

isset no trabaja con JQuery

Publicado por Vainas (262 intervenciones) el 19/10/2014 09:48:46
Pues lo que me cuentas es mas o menos el mismo codigo que te he pasado.

tengo una función que ejecuta siempre el mismo código cada vez que el usuario apreta en "Próxima pregunta"

Pues a esta funcion mandale un parametro con el nombre de la pregunta oculto (un input hidden) y asi sabras que pregunta tienes que desvolver.

cuando hagas un "echo" en php al que has llamado con un ajax siempre tienes que tener en cuenta que son datos que traes, es decir que no estan en la pagina actual asi que con jquery tendras que insertarlos (yo creo que es todo lo que te falta). mira el success que he hecho:

1
2
3
4
5
success: function(data) {
	var $response=$(data);
	$("#pregunta").html($response);
//...
}

recoges la data, que es html, y la meto dentro de un div. Luego ya puedo volver a usar los selecctor de jquery. Yo creo que es lo unico que necesitas saber ahora mismo para poner a andar tu codigo bien.

Para eso estamos por aqui, que los que ayudamos tambien aprendemos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

isset no trabaja con JQuery

Publicado por Damian (62 intervenciones) el 21/10/2014 15:04:51
Justamente Vainas parece ser que en esa parte de código que me pasas estaría la solución. Sigo probando en JQuery (lo de PHP no lo quiero tocar por ahora) y tengo ahora algo como esto:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<div id='pregunta'></div>
....
...
$("#frJgo").submit(function(e){
//$("#Aceptar").submit(function(e){
//$("#Aceptar").click(function(e){	
		e.preventDefault();
		var dataString = $("#frJgo").serialize()+ '&' + encodeURI("Aceptar")+ '='+ encodeURI($("input[name$='Aceptar']").val());
		//alert('Datos serializados: '+dataString);
        $.ajax({
			url: "preg-1.php",
            type: "POST",
            data: dataString,
			cache: false,
			success: function (data) {
				var $response=$(data);
				//var respuser = $response.filter('#txtPreg');
 
				$("#pregunta").html($response).slideDown(600);
				//$("#pregunta").html(response);
				//$("#pregunta").add("#txtPreg");
				//$("#pregunta").show();
				empezarTimer(this);
      		}
      });
	return false;
  });

Y me logra mostrar sin refrescar la página lo que está dentro del botón if (isset($_POST['Aceptar'])) en PHP dónde tiene otro form y un div, hasta el cronómetro corre (empezarTimer(this)). Pero, siempre hay un pero por ahora....me trae tooooda la página actual y no sólo una parte. Debe ser por ese .html(response) y claro con el simple show() no trabaja. También probé de agregar el div que quiero mostrar (.add("#txtPreg")) al div de 'pregunta' pero no hace nada. En definitiva no refresca toda la página, pero me trae toda la página; valga la redundancia.

Otra cosa que necesitaría es además de ese botón 'Aceptar', que lo guarda en dataString, el botón 'Cancelar'. En concreto todo lo que está en <div id='txtPreg'>.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

isset no trabaja con JQuery

Publicado por Damian (62 intervenciones) el 26/10/2014 04:54:25
Bueno se ha solucionado en parte, tuve que agregar la siguiente línea en JQuery para que no me traiga toda la página:
1
2
$response = $('#frJgo', data).html();
	   $("#pregunta").html($response);
De esta forma traigo el próximo formulario con sus botones. Ahora el problema es que al hacer click en uno de los botones de ese formulario, no hace nada. Pero si lo dejo como tenía antes, esto es:
1
2
var $response=$(data);
	$("#pregunta").html($response);
Ahí si me funciona el botón que trae ese formulario ("frJgo"), pero me trae todo la página, por eso lo de
1
$response = $('#frJgo', data).html();
para que sólo me muestre ese formulario con su div...pero ahora el click (como ya dije) del frJgo no me lo toma.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar