【问题标题】:Unserialize data from HTML inside JavaScript with pure JS or jQuery使用纯 JS 或 jQuery 从 JavaScript 中的 HTML 反序列化数据
【发布时间】:2019-12-23 14:33:25
【问题描述】:

我目前正在尝试对从 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>

【问题讨论】:

  • 能否提供 print($obj->value);在这里?
  • 您最好在 PHP 中反序列化它,然后将其转换为 JSON,然后将其放入 data-value 属性中。
  • 或者只是在页面加载时对数据发出 ajax 请求,然后在 java 脚本中处理数据
  • 您的字符串替换会破坏反序列化
  • @NashPL 在这种情况下这是没有意义的。

标签: javascript php jquery arrays


【解决方案1】:

您正在尝试将序列化的数据位(不是 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);

https://3v4l.org/Z3jJA

现在你的东西看起来像这样:

<span data-value='[{"issue":"Test","estimation":"5"},{"issue":"Impl","estimation":"5"}]'></span>

请注意,我使用了单引号!

你的 JS 应该可以工作。 :-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多