You need to enable JavaScript to run this app. 如何从Promise返回的带pre标签的JSON响应中提取email字段值
优惠活动
大模型
产品
解决方案
定价
更多

如何从Promise返回的带pre标签的JSON响应中提取email字段值

问题原因

你当前拿到的response是JSON字符串格式,不是可直接读取属性的JavaScript对象,因此直接使用response.email、response['email']的方式无法读取到对应值。

解决方法

分为两种场景处理:

场景1:使用fetch API发起请求

需要先调用响应对象的.json()方法,将返回的JSON字符串解析为JS对象:

responseData
  // 新增这一步解析JSON内容
  .then(response => response.json())
  .then(parsedData => {
    // 此时可以正常读取属性
    console.log(parsedData.email); // 输出 FOUND
    console.log(parsedData.password); // 输出 MATCH
  })

场景2:已经拿到字符串形式的响应内容

直接使用JSON.parse()手动转换为JS对象即可:

const parsedData = JSON.parse(response);
console.log(parsedData.email); // 输出 FOUND
额外优化建议

为了避免解析异常,建议对PHP侧的返回逻辑做两处调整:

  1. 输出JSON前先设置正确的响应头,告知前端返回内容为JSON格式
  2. 不要用自定义的print_r2函数输出,直接用echo输出JSON内容后终止程序,避免多余的调试信息、空白字符污染JSON结构
  3. 注意json_encode的第二个参数为格式选项,不需要传true,你可能是和json_decode的参数混淆了

修正后的PHP代码参考:

if(count($user) == 1){
    $response['email'] = 'FOUND';
    if($_POST['formPassword'] == $user[0]['password']){
        $response['password'] = 'MATCH';
    }else{
        $response['password'] = 'NO MATCH';
    }
}else if(count($user) == 0){
    $response['email'] = 'NOT FOUND';
}else{
    $response['email'] = 'DATABASE CORRRRUPT';
}
// 新增响应头设置
header('Content-Type: application/json; charset=utf-8');
// 直接输出JSON,终止后续逻辑
echo json_encode($response);
exit;

内容的提问来源于stack exchange,提问作者DCR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 05:36:06