sql >> Base de Datos >  >> RDS >> Mysql

Pasar una matriz de PHP a Javascript usando JQuery y JSON

Creo que su PHP está devolviendo un error, en lugar del JSON que esperaba. Ya que tiene dataType: 'json' , jQuery intenta analizar la respuesta, pero falla. Cuando eso sucede, jQuery no llama al success devolución de llamada.

Si puede, use Firebug para ver qué devuelve la llamada ajax. Otra forma sería cambiar temporalmente a dataType: 'html' y luego cambie su success devolución de llamada a:

success: function(msg) { alert(msg); }

Con suerte, cuando vea que se devuelve el mensaje, ayudará a identificar el problema. Sin embargo, una cosa que debe hacer es agregar código para manejar los casos en los que la consulta no se ejecuta y donde no se obtiene ninguna fila de la base de datos. Puede agregar el siguiente código al archivo PHP:

$result = mysql_query($query, $con);

if (!$result) {
    die('Could not run query: ' . mysql_error($con));
}

if (mysql_num_rows($result) < 1) {
    echo 'null';
    exit;
}

$data = mysql_fetch_row($result);

Sin embargo, también hay algunos problemas con la llamada Ajax:

(1) Está especificando contentType: "application/json; charset=utf-8" , pero entonces no está enviando JSON. Deberías hacer algo como esto:

data: JSON.stringify({}),

Pero si hace esto, no puede obtener los datos en el servidor usando el $_POST función. Por lo tanto, es posible que desee deshacerse del contentType ajuste en su lugar. Vea esta SO respuesta para más información.

(2) Cuando especifica dataType: 'json' , JQuery analizará la respuesta a un objeto antes de llamar a la devolución de llamada exitosa, por lo que msg el parámetro ya debería ser un objeto. Por lo tanto, no debe llamar a JSON.parse(msg) .

(3) Está devolviendo una matriz asociativa del archivo PHP. Eso se convertirá en un objeto de JavaScript, no en una matriz.

Creo que deberías intentar lo siguiente:

$.ajax('refreshData.php', {
    type: 'post',
    dataType: 'json',
    data: { },
    cache: false,
    success: function (data) {
        if (data) {
            $('#interface_stats').html('Fatigue: ' + data.fatigue);
        }
    }
});