Penso che il tuo PHP restituisca un errore, piuttosto che il JSON che ti aspetti. Dal momento che hai dataType: 'json'
, jQuery tenta di analizzare la risposta, ma non riesce. Quando ciò accade, jQuery non chiama il success
richiamata.
Se puoi, usa Firebug per vedere cosa viene restituito dalla chiamata ajax. Un altro modo sarebbe cambiare temporaneamente in dataType: 'html'
e poi cambia il tuo success
richiamata a:
success: function(msg) { alert(msg); }
Si spera che quando vedrai il messaggio restituito, aiuterà a identificare il problema. Una cosa che dovresti fare, però, è aggiungere codice per gestire i casi in cui la query non viene eseguita e in cui nessuna riga viene recuperata dal database. Puoi aggiungere il seguente codice al file 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);
Tuttavia, ci sono anche alcuni problemi con la chiamata Ajax:
(1) Stai specificando contentType: "application/json; charset=utf-8"
, ma non stai inviando JSON. Dovresti fare qualcosa del genere:
data: JSON.stringify({}),
Ma se lo fai, non puoi ottenere i dati sul server usando il $_POST
funzione. Pertanto, potresti voler eliminare il contentType
impostazione invece. Vedi questa risposta SO
per ulteriori informazioni.
(2) Quando specifichi dataType: 'json'
, JQuery analizzerà la risposta a un oggetto prima di chiamare il callback di successo, quindi il msg
parametro dovrebbe essere già un oggetto. Pertanto, non dovresti chiamare JSON.parse(msg)
.
(3) Stai restituendo un array associativo dal file PHP. Verrà convertito in un oggetto JavaScript, non in un array.
Penso che dovresti provare quanto segue:
$.ajax('refreshData.php', {
type: 'post',
dataType: 'json',
data: { },
cache: false,
success: function (data) {
if (data) {
$('#interface_stats').html('Fatigue: ' + data.fatigue);
}
}
});