首页 > 解决方案 > 如何从 Promise 中访问特定元素

问题描述

在 php 中,我返回 javascript 以下内容:

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';
}

print_r2(json_encode($response,true));

在我的 js 文件中,我有:

responseData.then(function(response){
    console.log(response)

这写到控制台:

<pre>{"email":"FOUND","password":"MATCH"}</pre>

如何访问与键“email”关联的值“FOUND”?我试过 response['email']、response.email 和 response[0]['email']

标签: javascriptphppromise

解决方案


标题非常具有误导性,因为该问题与 Promise 完全无关。

后端不提供纯 JSON,而是提供包含 JSON 的 HTML。有两种方法可以解决这个问题。第一种方法是在 PHP 中打印没有 HTML 的纯 JSON。

print_r(json_encode($response,true));

第二种方法是解析 HTML,读取节点并将其解析为 JSON:

const responseData = Promise.resolve('<pre>{"email":"FOUND","password":"MATCH"}</pre>');
responseData.then(function(response){
  const dom = new DOMParser().parseFromString(response, 'text/html');
  console.log(JSON.parse(dom.children[0].innerText).email);
});

当然,如果可能的话,我更喜欢第一种方法。


推荐阅读