Tôi nghĩ rằng PHP của bạn đang trả về một lỗi, chứ không phải là JSON mà bạn đang mong đợi. Vì bạn có dataType: 'json'
, jQuery cố gắng phân tích cú pháp phản hồi, nhưng không thành công. Khi điều đó xảy ra, jQuery không gọi success
gọi lại.
Nếu bạn có thể, hãy sử dụng Firebug để xem những gì đang được trả về bởi lệnh gọi ajax. Một cách khác là tạm thời thay đổi thành dataType: 'html'
và sau đó thay đổi success
của bạn gọi lại:
success: function(msg) { alert(msg); }
Hy vọng rằng khi bạn thấy thông báo được trả lại, nó sẽ giúp xác định sự cố. Tuy nhiên, một điều bạn nên làm là thêm mã để xử lý các trường hợp truy vấn không thực thi được và không có hàng nào được tìm nạp từ cơ sở dữ liệu. Bạn có thể thêm mã sau vào tệp 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);
Tuy nhiên, cũng có một số vấn đề với lệnh gọi Ajax:
(1) Bạn đang chỉ định contentType: "application/json; charset=utf-8"
, nhưng sau đó bạn không gửi JSON. Bạn nên làm như sau:
data: JSON.stringify({}),
Nhưng nếu bạn làm điều này, bạn không thể lấy dữ liệu trên máy chủ bằng $_POST
hàm số. Do đó, bạn có thể muốn loại bỏ contentType
cài đặt thay thế. Xem câu trả lời SO
này để biết thêm thông tin.
(2) Khi bạn chỉ định dataType: 'json'
, JQuery sẽ phân tích cú pháp phản hồi tới một đối tượng trước khi gọi lệnh gọi lại thành công, vì vậy msg
tham số phải là một đối tượng. Do đó, bạn không nên gọi JSON.parse(msg)
.
(3) Bạn đang trả về một mảng kết hợp từ tệp PHP. Điều đó sẽ được chuyển đổi thành một đối tượng JavaScript, không phải một mảng.
Tôi nghĩ bạn nên thử những cách sau:
$.ajax('refreshData.php', {
type: 'post',
dataType: 'json',
data: { },
cache: false,
success: function (data) {
if (data) {
$('#interface_stats').html('Fatigue: ' + data.fatigue);
}
}
});