Jeg tror, at din PHP returnerer en fejl snarere end den JSON, du forventer. Da du har dataType: 'json'
, jQuery forsøger at parse svaret, men mislykkes. Når det sker, kalder jQuery ikke success
tilbagekald.
Hvis du kan, brug Firebug til at se, hvad der returneres af ajax-opkaldet. En anden måde ville være midlertidigt at ændre til dataType: 'html'
og derefter ændre din success
tilbagekald til:
success: function(msg) { alert(msg); }
Forhåbentlig vil det hjælpe med at identificere problemet, når du ser meddelelsen blive returneret. En ting, du dog bør gøre, er at tilføje kode for at håndtere de tilfælde, hvor forespørgslen ikke kan udføres, og hvor ingen række hentes fra databasen. Du kan tilføje følgende kode til PHP-filen:
$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);
Der er dog også et par problemer med Ajax-opkaldet:
(1) Du angiver contentType: "application/json; charset=utf-8"
, men så sender du ikke JSON. Du bør gøre noget som dette:
data: JSON.stringify({}),
Men hvis du gør dette, kan du ikke få data på serveren ved hjælp af $_POST
fungere. Derfor vil du måske slippe af med contentType
indstilling i stedet for. Se dette SO-svar
for mere information.
(2) Når du angiver dataType: 'json'
, vil JQuery parse svaret til et objekt, før det kalder tilbagekaldet, så msg
parameter skal allerede være et objekt. Derfor bør du ikke kalde JSON.parse(msg)
.
(3) Du returnerer et associativt array fra PHP-filen. Det vil blive konverteret til et JavaScript-objekt, ikke et array.
Jeg synes, du skal prøve følgende:
$.ajax('refreshData.php', {
type: 'post',
dataType: 'json',
data: { },
cache: false,
success: function (data) {
if (data) {
$('#interface_stats').html('Fatigue: ' + data.fatigue);
}
}
});