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

Hola amigos mi problema es cuando envió mis variables mediante ajax a mi .php. Me marca un error la variable 'data.estado' una vez que regresa, Ya pude traer el elemento que selecciona y obtener su valor pero hay un error en mi regreso de datos del ajax. No se que es. Una ayuda por favor y gracias por darse una vuelta a mi pregunta jejeje :).

Mi código ajax y controlando el radio seleccionado:

var ComprobarSeleccion = false;

    $('input[type=radio][name=radioStacked]').change(function(){

        ComprobarSeleccion = true;

        $.ajax({
             url: "cuestionario.php",
             type: "POST",
             data:{ valor:this.value, verificar:ComprobarSeleccion},
             dataType:"jsonp",
             jsonp:"jsoncallback",
             contentType:'application/json; charset=utf-8',
             crossDomain: true,
             cache: false,
             success:function($data){
                //unselect(this);
                 //console.log($data.estado);
                 if($data.estado=="seleccionado"){
                    alert("Exito");
                 }

                 console.log($data.estado);

             },
             error: function($data){
                alert( "Error en la petición: " +  JSON.stringify($data));
             }
        });

    });

Mi código PHP donde intento atrapar el valor del radio button:

 <?php
        session_start();
        if(isset($_SESSION['sesion_iniciada']) == true ){

                $id_alumno = $_SESSION['alumno'] ;

                $datos = array();
                $a = false;    
                if(isset($_GET['verificar']) && !empty($_GET['verificar'])){
                    if($_GET['verificar']){
                       $valor = $_GET['valor'];
                       $a = true;

                       $datos["estado"] = "seleccionado";
                       //var_dump($datos);
                    }else{
                       $datos["estado"] = "error123";  
                       $a = true;

                    }
                 }
                 //var_dump($datos);

                 if($a == true){
                     $resultadoJson = json_encode($datos);

                     //var_dump($resultadoJson);
                     echo $_GET['jsoncallback'] . '(' . $resultadoJson . ');'; 
                 }        
    ?>

La verdad no se si estoy tomando el camino más adecuado y eficaz, por favor acepto sugerencias, indicaciones y correcciones. Gracias.

Mi error en la petición del ajax:

Error en la petición: {"readyState":4,"status":200,"statusText":"load"}

Mi error en la consola:

Uncaught SyntaxError: Unexpected token < 

Lo que me imprime la variable data.estado en la consola al llegar mi ajax:

jQuery331004199455651714534_1532107113667({"estado":"seleccionado"});

Y me marca error en mi etiqueta HTML me la remarca con color rojo y con una 'x' esta.

2 Respuestas

1voto

Diegos Puntos380

SOLUCIONADA
Amigo ya solucione mi problema faltaba exit(); abajo de mi echo $_GET['jsoncallback'] . '(' . $resultadoJson . ');'; Gracias por todo.

Peter comentado Ago 1

Gracias por compartir la solución.

1voto

Leonardo-Tadei Puntos223480

Hola @Diegos,

el código luce bien.

Lo que parece que te está pasando es que, al recibir la respuesta del servidor, no estás prosesando el JSON que recibís para convertirlo en la estructura de datos que enviás, sino que lo estás queriendo usar directamente.

Me imagino algo como:

success:function(respuesta){
   // convierte la respuesta a JSON
   $data = JSON.parse(respuesta);
   if($data.estado=="seleccionado"){
      alert("Exito");
   }
   console.log($data.estado);
},

Hasta dónde recuerdo, JQuery no convierte automáticamente la respuesta en una estructura de datos local. Habría que confirmarlo con la documentación, pero por la salida del console.log(), parace que sigue siendo el string recibido.

Por otra parte, tu código fallará también cuando en el PHP $a sea falso, porque no estás emitiendo un JSON como respuesta.

Saludos cordiales!

Diegos comentado Jul 21

Amigo probé lo que me sugeriste y me marca el mismo error.

Leonardo-Tadei comentado Jul 21

Podrías poner como te quedó el JavaScript y la salida del console.log() de la respuesta recibida y de la variable luego del JSON.parse?

Diegos comentado Jul 23

Amigo lo que me salio en la consola, imprimiendo data.estado e igual imprimiendo data:

Uncaught SyntaxError: Unexpected token <
jQuery3310147433700257678_1532360209835({"estado":"seleccionado"});      

<!doctype html>

Leonardo-Tadei comentado Jul 30

El error "Unexpected token" es por ese <!doctype html> que aparece por ahí.

La salida del script que genera el JSON tiene que tener únicamente JSON: pareciera que además del JSON estás enviando el principio de un documento HTML.

Te conviene ver la llamada y la respuesta XHR con el navegador, para ver qué es lo que estás recibiendo como respuesta...

Cómo te decía más arriba, las salidas que mostrás no se corresponden con el código de tu pregunta y nos es más difícil sugerirte qué hacer para solucionar el error.

Saludos cordiales

Diegos comentado Jul 31

Amigo ya solucione mi problema faltaba exit(); abajo de mi echo $_GET['jsoncallback'] . '(' . $resultadoJson . ');'; Gracias por todo.

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

¿Conoces alguien que puede responder?
¡Comparte esta pregunta!


Otras Preguntas y Respuestas


Actividad Reciente

...

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

Conecta