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);
}
}
});