javascript - 使用纯 JS 或 jQuery 从 JavaScript 中的 HTML 反序列化数据
问题描述
我目前正在尝试反序列化从 HTML 数据属性给出的数据。该值来自我的数据库的序列化字符串。
为了获得值,我正在从我的数据库中读取数据。之后,我将替换任何 " by ' 以防止 HTML 中的开始和结束标记出现问题:
<span data-value="<?= str_replace( '"', "'", $obj->value ) ?>"
这是一个最终看起来如何的示例:
<span data-value="a:2:{i:0;a:2:{s:5:'issue';s:4:'Test';s:10:'estimation';s:1:'5';}i:1;a:2:{s:5:'issue';s:4:'Impl';s:10:'estimation';s:1:'5';}}"></span>
我现在的计划是接收 JS 中的值并将其转换回数组,以便循环遍历它。我已经尝试过JSON.parse()
了,但失败了。你知道如何完成这项工作吗?
更新:
因为你们中的一些人告诉我,我的替换破坏了我的字符串,这是原始的一个示例:
jQuery( document ).ready( function ( $ ) {
let attr = $("span").attr("data-test");
console.log(JSON.parse(attr));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<span data-test='a:2:{i:0;a:2:{s:5:"issue";s:4:"Test";s:10:"estimation";s:1:"5";}i:1;a:2:{s:5:"issue";s:4:"Impl";s:10:"estimation";s:1:"5";}}'></span>
解决方案
您正在尝试将序列化的数据位(不是 JSON)解析为 JSON!
相反,只需使用 JSON!
<?php
$x = 'a:2:{i:0;a:2:{s:5:"issue";s:4:"Test";s:10:"estimation";s:1:"5";}i:1;a:2:{s:5:"issue";s:4:"Impl";s:10:"estimation";s:1:"5";}}';
$array = unserialize($x);
header('Content-Type: application/json');
echo json_encode($array);
现在你的东西看起来像这样:
<span data-value='[{"issue":"Test","estimation":"5"},{"issue":"Impl","estimation":"5"}]'></span>
请注意,我使用了单引号!
你的 JS 应该可以工作。:-)
推荐阅读
- android - 如果应用程序的默认方向设置为纵向模式,我们如何检测使用 CameraX 捕获的图像的方向
- sql - 使用 CTE 与 SubQuery 重构 SQL 查询
- javascript - 奇怪的行为 onsubmit react-bootstrap form
- tableau-api - Tableau:如何在工作表中显示两个不同的列,但在过滤器中连接两列
- vuejs2 - 我将 Storybook 安装到 Gridsome 项目中,现在它已经破坏了 Gridsome 构建
- visual-studio - 如何拦截对此属性窗口的更改?
- java - Java循环属性和使用反射修改默认值
- c# - 使用 c# 进行大量数量比较
- r - 如何在r中循环显示真实日期
- java - leetcode 437 为什么还要对子节点应用 DFS?