【发布时间】:2014-02-16 21:21:39
【问题描述】:
我有一个游戏,它每 10 秒刷新一次 MySQL 数据库中的信息。每次发生这种情况时都会调用一个 JS 函数。我无法执行成功功能,我也不知道为什么。控制台上也没有错误。
Javascript:
function refreshStats() {
console.log("number 1");
$.ajax({
url: "refreshData.php",
type: "POST",
contentType: "application/json; charset=utf-8",
dataType : 'json',
data: { },
cache: false,
async: true,
success: function (msg) {
if(msg){
console.log("number 2");
var arr = JSON.parse(msg);
document.getElementById("interface_stats").innerHTML =
"Fatigue: " + arr[0];
}
}
});
}
PHP:
<?php
$username = $_POST['user'];
ini_set('display_errors', 1);
error_reporting(E_ALL);
$con = mysql_connect("localhost","redacted","redacted");
if (!$con)
{
die('SQL error! Aborting: ' . mysql_error($con));
}
$db = mysql_select_db("aftertheend",$con) or die("Database error! Aborting. Inform the admin.");
$query = "SELECT fatigue, food, water, radiation, condition FROM users WHERE username='TheMightyThor'";
$result = mysql_query($query, $con);
$data = mysql_fetch_row($result);
$stats = [
"fatigue" => $data[0],
"food" => $data[1],
"water" => $data[2],
"radiation" => $data[3],
"condition" => $data[4]
];
echo json_encode($stats);
?>
【问题讨论】:
-
添加一个将详细信息记录到控制台的错误函数
-
当你指定
dataType: 'json'时,JQuery会在调用success回调之前将响应解析为一个对象,所以msg参数应该已经是一个对象了。 -
您已将
dataType设置为 JSON。 jQuery 会自动为您解析响应,因此当您的success函数执行时,您的msg变量将已经是一个 Javascript 对象 - 无需再次解析。我很惊讶它没有出现在控制台中。 -
Edit 我贴的错误码不相关,所以直接删了。我不确定我是否遵循建议-如果未激活成功功能,这是否表明在脚本中此时解析无关紧要?还是 PHP 脚本中的编码有问题?
-
从你的 ajax 中移除 dataType 和 contentType。将 php $_POST 更改为 $_GET 并手动尝试使 php 工作。将 header 内容类型 application/json 添加到 php 输出。
标签: javascript php jquery mysql json