使用JQuery和JSON将数组从PHP传递到Javascript

我有一个游戏,每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:

  $data[0], "food" => $data[1], "water" => $data[2], "radiation" => $data[3], "condition" => $data[4] ]; echo json_encode($stats); ?> 

我认为您的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设置。 有关详细信息,请参阅此SO答案 。

(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); } } });