javascript - 如何从 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']
解决方案
标题非常具有误导性,因为该问题与 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);
});
当然,如果可能的话,我更喜欢第一种方法。
推荐阅读
- php - Laravel - “方法 Illuminate\\Database\\Query\\Builder::recipes 不存在
- c# - C# FTP with WebClient Error: The remote server returned an error: (534) 534 Policy requires SSL
- r - 如何估计 r 中已知百分位数的 beta 分布参数
- java - 停止扫描仪等待输入
- python - Python 复利不起作用
- magento2 - 如何在 Magento 2 中扩展加载器小部件,以便每次加载器出现时都会显示背景图像
- apache - Apache 文件夹索引描述字段
- javascript - 为什么我的图像不会绘制但它会加载?
- html - 使网站在搜索结果中完全不可见
- mysql - SQL - 比较表上不同日期的销售额差异