entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Cómo cambiar de pregunta al momento de recibir una petición ajax

Hola amigos mi problema es que no se cambia mi pregunta al momento de que se envían los datos.

Resumen: El usuario responde una pregunta seleccionando un radio button, después de hay se envía la petición ajax con el valor de la pregunta y el contador es decir que esa variable será la encargada de cambiar la pregunta del arreglo de preguntas $array_preguntas[$contador]; Lo que quiero lograr cada vez que se envie una peticion ajax cambiar de pregunta mediante el contador. Y no cambia es cómo si no incrementara mi variable $contador.

Que estoy haciendo mal por favor me podrían orientar. Gracias.

Mi código en donde capturo mis variables del ajax:

 $datos = array();
    $Comprobar_Estado = false;

    if(isset($_GET['contador']) && !empty($_GET['contador'])){

        if($_GET['contador']){
            $respuesta = $_GET['valor'];
            $contador_preguntas = $_GET['contador']; 
            Guardar_Datos($respuesta,$contador_preguntas);
            CambiarPregunta();

            $datos["estado"] = "correcto";
        }else{
            $datos["estado"] = "error";  
        }
        $Comprobar_Estado = true;

    }

    if($Comprobar_Estado){      
        $resultadoJson = json_encode($datos);
        echo $_GET['jsoncallback'] . '(' . $resultadoJson . ');';
        exit();
    }

Aquí esta mi código html...................
<!DOCTYPE html>
................

Mi código en donde intento cambiar de pregunta, después sigue un poco más de código HTML y mi php.

<?php
        $array_id_preguntas = array();
        $array_preguntas = array();
        $array_respuestas = array();
        $array_contador = array();
    ?>
   <h5>
       <?php

          while($registro = mysqli_fetch_array($resultado)){
               array_push ($array_id_preguntas, $registro[0]);
               array_push ($array_preguntas, $registro[1]);
          }

          $contesto=false;

          $contador;
          CambiarPregunta();

          function CambiarPregunta(){

                   global $contesto;
                   global $contador;

                   global $array_preguntas;

                   if(!$contesto){
                       $contador=0;
                   }

                   if($contador == 0){
                       echo $array_preguntas[$contador];
                   }else{
                       echo $array_preguntas[$contador];
                   }

           }

           function Guardar_Datos($respuesta,$contador_preguntas){
                    global $array_respuestas;
                    $array_respuestas[] = $respuesta;

                    global $contador;
                    $contador = $contador_preguntas;

                    global $contesto;
                    $contesto = true;

           }

       ?>
   </h5>

Mi código ajax, Aclaro que si me funciona pero en mi php no cambia la pregunta.

var contador_preguntas = 1;        

     $('input[type=radio]').click(function(){

            var value = this.value;
            var objeto = this;

            var request = $.ajax({
                url: "cuestionario.php",
                type: "POST",
                data:{ valor: value, contador: contador_preguntas},
                dataType:"jsonp",
                jsonp:"jsoncallback",
                crossDomain: true,
                cache: false
            });

             request.done(function(data){

                if(data.estado=="correcto"){
                    alert("Exito ");
                    contador_preguntas++;

                }else{
                    alert("Error");
                }
            });
        });

Ya he comprobado que si incrementa cuando imprimo el valor de la variable $contador en el 'else' me sale esto: El 1 indica que se cambio el cero por este.

  1 jQuery33107174231404939353_1533012029373({"estado":"correcto"});

Entonces concluí que si lo esta incrementado sin embargo no se cambia la pregunta, Al principio cuando la recargo la pagina si me muestra todo bien pero cuando selecciono una respuesta no cambia la pregunta y mi código ajax de mi js si me funciona solo quiero saber si estoy haciéndolo bien o que me falta o no será lo indicado lo que estoy haciendo para conseguir lo que quiero acepto sugerencias porfa.

Otra observación en la que concluí es que creo que tengo que esperar que termine el proceso de peticion ajax así que no puedo hacer lo que quiero hasta que me devuelva a respuesta por el lado del cliente pero si esto es cierto, cómo voy a poder cambiar la pregunta cuando se seleccione una respuesta tiene que ser en ese mismo momento o no?

0voto

Diegos comentado

Ya no hay problema ya la solucione gracias a todos los que se tomaron el tiempo de ver mi problema e intentar resolverlo. :)

0voto

Peter comentado

Por favor publica una respuesta con la solución y seleccionala como correcta. Así le sirve a otros usuarios con problemas similares.

Saludos.

1 Respuesta

2votos

Diegos Puntos410

ATENCIÓN AMIGOS: la solución que tuve fue dejar al servidor ya que hacía una petición cada vez que quería mostrar una pregunta es mejor hacerlo así:

//Usted puede hacerlo con un click de un botón etc, lo tengo así porque no tengo botón más que los radios button donde al momento de seleccionar se tiene que cambiar la pregunta, pero antes debe cargar una primera pregunta, por eso uso ready, al principio.

var activar = true;        
var contador = 0;
var array_preguntas = new Array();

$(document).ready(function(){
   //La petición ajax,la diferencia esta en la variable data solo necesite de una variable. 
   var request = $.ajax({
            url: "cuestionario.php",
            type: "POST",
            data:{ activar_envio: activar},
            dataType:"jsonp",
            jsonp:"jsoncallback",
            crossDomain: true,
            cache: false
        });
}

if(data.estado=="correcto"){
     //Extraigo todas las preguntas de mi php BD     
     array_preguntas = data.preguntas.slice();
     $("#show_pregunta").html("Id_Pregunta: " + array_preguntas[contador]);

}else{
     alert("Error");
}

Por ultimo controlas las preguntas para mostrarlas, e mi caso el radio
 $('input[type=radio]').click(function(){
    //Aquí pones la condición para que al momento de que el contador supere a la longitud de array no muestre undefined y eso quiero decir que ya acabo de responder todo y ya lo mandas por de quieras.
}

  Para pasar las preguntas y después enviárselo por el lado del cliente (javascript)  el código es el mismo solo agregar esto.
 $datos["preguntas"]  = $array_preguntas;

0voto

Peter comentado

Gracias por compartir la solución!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta