Myślę, że Twój PHP zwraca błąd, a nie JSON, którego oczekujesz. Ponieważ masz dataType: 'json'
, jQuery próbuje przeanalizować odpowiedź, ale kończy się niepowodzeniem. Kiedy tak się dzieje, jQuery nie wywołuje success
oddzwonienie.
Jeśli możesz, użyj Firebuga, aby zobaczyć, co jest zwracane przez wywołanie ajax. Innym sposobem byłaby chwilowa zmiana na dataType: 'html'
a następnie zmień swój success
oddzwonienie do:
success: function(msg) { alert(msg); }
Mamy nadzieję, że gdy zobaczysz zwracaną wiadomość, pomoże to zidentyfikować problem. Jedną z rzeczy, które powinieneś zrobić, to dodać kod, aby obsłużyć przypadki, w których zapytanie nie zostanie wykonane i gdy żaden wiersz nie zostanie pobrany z bazy danych. Możesz dodać następujący kod do pliku 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);
Istnieje jednak kilka problemów z wywołaniem Ajax:
(1) Określasz contentType: "application/json; charset=utf-8"
, ale wtedy nie wysyłasz JSON. Powinieneś zrobić coś takiego:
data: JSON.stringify({}),
Ale jeśli to zrobisz, nie możesz pobrać danych na serwer za pomocą $_POST
funkcjonować. Dlatego możesz chcieć pozbyć się contentType
ustawienie zamiast. Zobacz tę odpowiedź na ten temat
aby uzyskać więcej informacji.
(2) Gdy określisz dataType: 'json'
, JQuery przeanalizuje odpowiedź do obiektu przed wywołaniem wywołania zwrotnego powodzenia, więc msg
parametr powinien już być obiektem. Dlatego nie powinieneś wywoływać JSON.parse(msg)
.
(3) Zwracasz tablicę asocjacyjną z pliku PHP. To zostanie przekonwertowane na obiekt JavaScript, a nie tablicę.
Myślę, że powinieneś spróbować następujących czynności:
$.ajax('refreshData.php', {
type: 'post',
dataType: 'json',
data: { },
cache: false,
success: function (data) {
if (data) {
$('#interface_stats').html('Fatigue: ' + data.fatigue);
}
}
});