PHP返回数组格式字符串经AJAX请求后如何转换为可用JS数组
解决方案
你之前的实现存在两个核心问题:
- 手动拼接的数组字符串不符合标准JSON格式(JSON要求字符串必须用双引号包裹),无法被直接解析为JS数组
- 前端没有指定响应数据的解析格式,默认会把返回内容当做纯字符串处理
PHP端修改
不要手动拼接返回字符串,改用PHP内置的json_encode()函数生成标准JSON格式数据,同时添加响应头声明数据类型:
$g = new Game(); // 仅查询一次数据,避免重复调用方法造成性能浪费 $matchData = $g->getMatchKills($lobby)[0]; // 构造PHP数组 $returnData = [ $matchData['p1c1kills'], $matchData['p2c1kills'], $matchData['p1c2kills'], $matchData['p2c2kills'], $matchData['p1c3kills'], $matchData['p2c3kills'], $matchData['p1c4kills'], $matchData['p2c4kills'], $matchData['p1c5kills'], $matchData['p2c5kills'] ]; // 声明响应内容为JSON格式 header('Content-Type: application/json'); // 输出JSON编码后的结果 echo json_encode($returnData);
JS端修改
在AJAX请求中添加dataType: 'json'配置,让jQuery自动将返回的JSON数据解析为原生JS数组:
function RefreshKDAs() { $.ajax({ url: 'getKills.php?lobby=<?= $lobby ?>', dataType: 'json', success: function (data) { // 此时data已经是可直接调用的JS数组,可通过下标访问元素 console.log(data); } }) }
注意事项
- PHP侧输出JSON前不要有任何额外输出(包括空格、换行、其他echo内容),否则会导致JSON解析失败
- 如果出于特殊情况无法修改PHP代码,也可以在JS侧用
JSON.parse(data.replace(/'/g, '"'))手动将单引号字符串转为标准JSON再解析,但非常不推荐该方案,手动拼接字符串容易出现转义异常问题。
内容的提问来源于stack exchange,提问作者skeenotihk
相关产品推荐
相关产品推荐

