Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Passando um array de PHP para Javascript usando JQuery e JSON


Acho que seu PHP está retornando um erro, em vez do JSON que você está esperando. Como você tem dataType: 'json' , o jQuery tenta analisar a resposta, mas falha. Quando isso acontece, o jQuery não chama o success ligue de volta.

Se puder, use o Firebug para ver o que está sendo retornado pela chamada ajax. Outra maneira seria mudar temporariamente para dataType: 'html' e, em seguida, altere seu success retorno de chamada para:
success: function(msg) { alert(msg); }

Espero que quando você vir a mensagem sendo retornada, isso ajude a identificar o problema. Uma coisa que você deve fazer é adicionar código para lidar com os casos em que a consulta não é executada e nenhuma linha é buscada no banco de dados. Você pode adicionar o seguinte código ao arquivo 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);

Há também alguns problemas com a chamada Ajax:

(1) Você está especificando contentType: "application/json; charset=utf-8" , mas você não está enviando JSON. Você deve fazer algo assim:
data: JSON.stringify({}),

Mas se você fizer isso, não poderá obter os dados no servidor usando o $_POST função. Portanto, você pode querer se livrar do contentType configuração em vez disso. Veja esta resposta SO Para maiores informações.

(2) Quando você especifica dataType: 'json' , o JQuery analisará a resposta para um objeto antes de chamar o retorno de chamada de sucesso, então a msg parâmetro já deve ser um objeto. Portanto, você não deve chamar JSON.parse(msg) .

(3) Você está retornando um array associativo do arquivo PHP. Isso será convertido em um objeto JavaScript, não em uma matriz.

Acho que você deveria tentar o seguinte:
$.ajax('refreshData.php', {
    type: 'post',
    dataType: 'json',
    data: { },
    cache: false,
    success: function (data) {
        if (data) {
            $('#interface_stats').html('Fatigue: ' + data.fatigue);
        }
    }
});