如何通过AJAX将PHP字符串数组转换为JavaScript对象数组
解决PHP返回类JSON字符串转JS对象数组的问题
嘿,我来帮你搞定这个问题!你现在的核心问题是PHP端手动拼接的类JSON字符串,到了前端没法直接用——因为它不是标准JSON格式,而且经过json_encode之后变成了普通字符串,前端拿到的其实是一串文本,不是现成的数组对象。下面给你两种解决方案,优先推荐第一种,更靠谱:
方案一:修改PHP代码(最优解)
别再手动拼接字符串啦,直接用PHP数组来构建数据,再通过json_encode输出,这样前端能直接拿到标准的JSON数组,不需要额外转换。
修改后的PHP代码示例:
// 初始化空数组 $maaltijdPrijzenArray = []; // 你的循环逻辑 while(/* 这里放你的循环条件,比如从数据库取数据的循环 */) { // 把每一条数据塞进数组 $maaltijdPrijzenArray[] = [ 'id' => $id, 'maaltijdprijs' => $kostprijs, 'verkoopprijs' => $verkoopprijs ]; } // 把数组放进响应里 $response['arrayMaaltijden'] = $maaltijdPrijzenArray; // 输出标准JSON echo json_encode($response);
这样前端AJAX设置dataType: 'JSON'之后,直接拿到的data.arrayMaaltijden就是现成的JavaScript数组对象,你可以直接用$.grep来筛选数据:
// AJAX成功回调里的代码 success: function(data) { var maaltijdPrijzenArray = data.arrayMaaltijden; var result = $.grep(maaltijdPrijzenArray, function(e){ return e.id == id; }); // 接下来就可以用result做你要的操作啦 }
这种方法的好处是完全符合JSON规范,不会因为字段里的特殊字符(比如引号、换行)导致格式混乱,维护起来也更简单。
方案二:前端修复解析(仅当无法修改PHP时使用)
如果因为某些限制不能改PHP代码,那你需要先把前端拿到的类JSON字符串转换成标准JSON格式,再解析成对象数组。注意:你手动拼接的字符串里的键名(比如id、maaltijdprijs)没有加双引号,这不符合标准JSON要求,直接用JSON.parse会报错,所以得先给键名加上双引号。
前端代码示例:
// AJAX成功回调里的代码 success: function(data) { // 拿到PHP返回的类JSON字符串 var rawStr = data.arrayMaaltijden; // 把没有引号的键名替换成带双引号的,适配标准JSON var validJsonStr = rawStr.replace(/(\w+):/g, '"$1":'); // 解析成JS数组对象 var maaltijdPrijzenArray = JSON.parse(validJsonStr); // 现在就可以用$.grep筛选了 var result = $.grep(maaltijdPrijzenArray, function(e){ return e.id == id; }); }
不过这个方法有风险,如果你的字段值里出现类似key:的格式,替换可能会出错,所以还是优先用方案一哦。
内容的提问来源于stack exchange,提问作者Stan van der Avoird
相关产品推荐
相关产品推荐

