PHP返回JSON数组后,前端如何正确获取属性值?
问题解决:无法正确访问AJAX返回的JSON数组属性
问题根源
你遇到的问题核心有两点:
- PHP返回的是JSON数组(外层带
[]),而非单个JSON对象,直接用response.itemValue访问相当于在数组上查找对象属性,自然返回undefined。 - 若jQuery未自动解析JSON响应,
response可能是字符串类型,同样无法直接访问对象属性。
修复方案
1. 让jQuery自动解析JSON(推荐)
在AJAX配置中添加dataType: 'json',确保success回调里的response是已解析的JavaScript数组:
if(itemID){ $.ajax({ type:'POST', url:'?syspath=ajax&controller=ajax&action=getActItemDose', data: { 'itemId': itemID, 'itemType': itemType }, dataType: 'json', // 指定响应类型为JSON,自动解析为JS对象/数组 success:function(response){ console.log(response); // 从数组中取出第一个对象 var object = response[0]; var value = object.itemValue; var unit = object.itemUnit; console.log(object); console.log(value); } }); }
2. 规范PHP响应头
在PHP代码中添加Content-Type头,明确告知浏览器返回的是JSON数据,避免解析异常:
header('Content-Type: application/json'); // 新增响应头 $row = $getProcess->fetch(); $object[] = array( 'itemValue' => $row['each_dose'], 'itemUnit' => $row['unit_dose'] ); echo json_encode($object);
3. 手动解析JSON(备用)
如果无法添加dataType,可以手动用JSON.parse()解析响应字符串:
success:function(response){ // 手动将字符串解析为数组 var responseArray = JSON.parse(response); var object = responseArray[0]; var value = object.itemValue; var unit = object.itemUnit; console.log(value); }
额外说明
你的PHP代码用$object[] = ...创建了数组结构,所以返回的JSON外层带[],必须通过索引(如[0])访问数组内的对象。如果只需要返回单个对象,也可以调整PHP代码直接返回json_encode($row),但保持数组结构更兼容多条数据的场景。
内容的提问来源于stack exchange,提问作者Muhammad Faiz Abdullah
相关产品推荐
相关产品推荐

