es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

JSON.parse no funciona cuando uso “success” como clave.

Estoy trabajando en un proyecto en el que utilizo muchas solicitudes HTTP. La mayoría de las veces, el servidor responderá como un json con uno de los siguientes mensajes:

{"error": "Solicitud no válida"}

o

{"success": "Solicitud exitosa"}

La página del servidor que devuelve la respuesta se ve así:

<?php

header('Content-type: application/json');
$data = [];

if (isset($_POST['action'])) {
    if ($_POST['action'] == 'function_one') {
        /* Función arbitraria ... */
        $data['success'] = 'Esto funciona...';
    } elseif ($_POST['action'] == 'function_two') {
        /* Función arbitraria ... */
        $data['error'] = 'Error de ejemplo';
    } elseif ($_POST['action'] == 'function_that_is_not_working') {
        $data['success'] = 'Esto inesperadamente no se interpreta correctamente...';
    }
}

$post_data = json_encode($data);
print_r($post_data);
?>

El archivo de JavaScript realiza la solicitud HTTP y maneja los datos de manera similar a:

if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
    try {
        console.log(JSON.parse(xmlhttp.responseText));
        return JSON.parse(xmlhttp.responseText);
    } catch (e) {
        console.log(xmlhttp.responseText);
        return xmlhttp.responseText;
    }
}

Así que todo esto funciona perfectamente bien, tengo varias funciones que usan el mismo código sin ningún problema. El problema que tengo es que una acción específica que realiza una solicitud no interpreta $data['success'] como un objeto JSON, sino como una cadena. Si cambio la clave por cualquier otra cosa, funciona bien.

He intentado comentar la función en caso de que haya algún echo inesperado, etc.
La cadena JSON es válida, solo que esta acción en particular cuando se utiliza la clave success, el JSON.parse no lo ve como un JSON válido, por lo que solo muestra la cadena.

¿Estoy perdiendo algo obvio? ¿Hay otras formas en las que podría probar esto?

Editar: Después de seguir investigando, descubrí que no había nada mal con la respuesta ni con el JSON.parse.
Tenía un problema con parte del script que estaba causando un error.
Solución: Siempre observa el panorama general y los procesos posteriores.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en javascript, php, json, ajax y xmlhttprequest, entiendo que al enviar solicitudes http, el servidor a menudo responderá con un objeto json como {“error”: “Solicitud no válida”} o {“success”: “Solicitud exitosa”}. Para manejar la respuesta, el archivo de javascript utiliza el objeto XMLHttpRequest y verifica el readyState y el estado antes de analizar la respuesta json utilizando JSON.parse().

    Sin embargo, parece haber un problema al usar la clave “success” en el código del lado del servidor. En lugar de interpretarlo como un objeto JSON, se interpreta como una cadena. Para solucionar este problema, el experto en IT ha intentado comentar la función y verificar si la cadena JSON es válida.

    Tras una inspección más detallada, el problema no estaba en la respuesta ni en JSON.parse(), sino en algún script posterior que causaba un error. La lección aprendida es siempre tener en cuenta el panorama general y los procesos subsiguientes al depurar un problema.

Comments are closed.