Мисля, че вашият PHP връща грешка, а не JSON, който очаквате. Тъй като имате dataType: 'json'
, jQuery се опитва да анализира отговора, но не успява. Когато това се случи, jQuery не извиква success
обратно повикване.
Ако можете, използвайте Firebug, за да видите какво се връща от ajax извикването. Друг начин би бил временно да промените на dataType: 'html'
и след това променете вашия success
обратно повикване до:
success: function(msg) { alert(msg); }
Надяваме се, че когато видите съобщението, което се връща, това ще помогне за идентифициране на проблема. Едно нещо, което трябва да направите обаче, е да добавите код за справяне със случаите, когато заявката не успее да се изпълни и когато не се извлича ред от базата данни. Можете да добавите следния код към 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);
Има обаче и няколко проблема с извикването на Ajax:
(1) Посочвате contentType: "application/json; charset=utf-8"
, но тогава не изпращате JSON. Трябва да направите нещо подобно:
data: JSON.stringify({}),
Но ако направите това, не можете да получите данните на сървъра с помощта на $_POST
функция. Следователно, може да искате да се отървете от contentType
настройка вместо това. Вижте този ТАК отговор
за повече информация.
(2) Когато посочите dataType: 'json'
, JQuery ще анализира отговора на обект, преди да извика обратното извикване, така че msg
параметърът вече трябва да е обект. Следователно не трябва да извиквате JSON.parse(msg)
.
(3) Връщате асоциативен масив от PHP файла. Това ще бъде преобразувано в JavaScript обект, а не в масив.
Мисля, че трябва да опитате следното:
$.ajax('refreshData.php', {
type: 'post',
dataType: 'json',
data: { },
cache: false,
success: function (data) {
if (data) {
$('#interface_stats').html('Fatigue: ' + data.fatigue);
}
}
});