Myslím, že váš PHP vrací chybu, spíše než JSON, který očekáváte. Protože máte dataType: 'json'
jQuery se pokusí analyzovat odpověď, ale selže. Když k tomu dojde, jQuery nevolá success
zpětné volání.
Pokud můžete, použijte Firebug, abyste viděli, co je vráceno voláním ajax. Dalším způsobem by byla dočasná změna na dataType: 'html'
a poté změňte svůj success
zpětné volání na:
success: function(msg) { alert(msg); }
Doufejme, že když uvidíte, že se zpráva vrací, pomůže vám to identifikovat problém. Jedna věc, kterou byste však měli udělat, je přidat kód pro zpracování případů, kdy se dotaz nezdaří a kdy není z databáze načten žádný řádek. Do souboru PHP můžete přidat následující kód:
$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);
Existuje však také několik problémů s voláním Ajax:
(1) Zadáváte contentType: "application/json; charset=utf-8"
, ale pak neposíláte JSON. Měli byste udělat něco takového:
data: JSON.stringify({}),
Ale pokud to uděláte, nemůžete získat data na server pomocí $_POST
funkce. Proto se možná budete chtít zbavit contentType
místo toho nastavení. Podívejte se na tuto odpověď SO
pro více informací.
(2) Když zadáte dataType: 'json'
, JQuery analyzuje odpověď na objekt před voláním zpětného volání úspěchu, takže msg
parametr by již měl být objekt. Proto byste neměli volat JSON.parse(msg)
.
(3) Vracíte asociativní pole ze souboru PHP. To bude převedeno na objekt JavaScriptu, nikoli na pole.
Myslím, že byste měli zkusit následující:
$.ajax('refreshData.php', {
type: 'post',
dataType: 'json',
data: { },
cache: false,
success: function (data) {
if (data) {
$('#interface_stats').html('Fatigue: ' + data.fatigue);
}
}
});