> Faqs > Problema con Ajax formado desde PHP. Error en Javascript: Unexpected token < in JSON

Problema con Ajax formado desde PHP. Error en Javascript: Unexpected token < in JSON

Hola a todos, soy nuevo en esta comunidad y me registre para un preciso problema.

Estoy trabajando con mvc en php con mysql como bd

Para eso estoy utlizando AJAX que a traves de un metodo POST con tipo de dato JSON envia el id a un script en php y este me retoma los valores filtrado por el ID a traves de una consulta mysql, que luego lo pasaria a json con json_encode.

El tema que me tira error "insert:131 text status=:parsererror, error thrown:=SyntaxError: Unexpected token < in JSON at position 0" y me devuelve la pagina index.php completa dando por resultado que no me muestre el segundo select

Código ajax que esta en insert.php, es la vista donde se carga el producto

$.ajax({
    data: { id : alumnos.val() },
    url:   'data.php',
    contentType: 'application/json; charset=utf-8',
    type:  'post',
    dataType: 'json',
    beforeSend: function () 
    {
        item.prop('disabled', true);
    },
    success:  function (data) 
    {
        item.prop('disabled', false);

        // Limpiamos el select
        subitem.find('option').remove();

       $(data).each(function(i, v){ // indice, valor
            subitem.append('<option value="' + v.id + '">' + v.name + '</option>');
        })

        subitem.prop('disabled', false);
    },
    error: function(XMLHttpRequest, textStatus, errorThrown)
    {
       console.log('text status=:' + textStatus + ', error thrown:=' +  errorThrown);
       console.log(XMLHttpRequest.responseText);
        item.prop('disabled', false);
    }
});

data.php esta el mismo nivel jerarquico con insert.php

include('../controllers/subitems.php');
			
	$subitem = $this->subitem_model->getSubitemByItem($_POST['id']);
	print_r(json_encode($data));

todo parece que el problema es por la direccion url y por eso me retoma automaticamente al index por el .htaccess PD: utilizo sublimeText3 y xampp.

Respuestas

Por lo que veo el sistema de jQuery te está dando un error al interpretar el JSON que está recibiendo.

Probablemente sea justamente que el JSON está mal formado. Vamos, casi fijo que el problema lo tienes del lado de PHP a la hora de construir la respuesta.

Lo más normal en estos casos es inspeccionar con las "Developer tools" o herramientas para desarrolladores de tu navegador. En la pestaña "Network" verás que está la solicitud al servidor que has hecho por Ajax. Al hacer clic sobre la solicitud verás que la puedes inspeccionar de manera detallada. Tienes que examonar la respuesta (response) de la solicitud y seguramente veas tú mismo que el JSON está mal formado.

Por el error que aparece, igual en la respuesta estás mezclando el JSON con código HTML y es lo que te da el problema. O a lo mejor estás recibiendo un error de PHP que se maqueta con etiquetas HTML para enviarse al navegador.

Esa es la clave, las herramientas para desarrolladores e inspeccionar la respuesta de tu Ajax.

Alberto
580 14 40 18
hola perdon por la tardanze. como ya dije por alguna razon al tirar un error me retorna la pagina index completa y json no interpreta html. podria ser que el error es debe al $subitem que es de tipo objeto y json tiene que resivir una matris? Claro, eso confirma lo que te digo, que es un JSON mal formado, por lo que tu error está en el lado del servidor. Tienes que ver por qué tu código PHP te muestra una página completa. También puede ser una configuración de tu servidor web, o que estés intentando acceder a una página que no existe.