gpt4 book ai didi

javascript - 2D json 数组错误地转换为字符串

转载 作者:行者123 更新时间:2023-11-28 08:26:16 24 4
gpt4 key购买 nike

我有一个外部数组,里面有 2 个元素。这 2 个元素中的每一个都是一个数组。所以它是一个二维数组。

以下是数组的创建方式:

 $outerArray = array();
$nestedArray = array("first", "second", "third", "fourth");
$outerArray[] = $nestedArray;
$nestedArray_2 = array("first", "second", "third", "fourth");
$outerArray[] = $nestedArray_2;

然后我按如下方式存储该数组:

 $jsonArray = json_encode($outerArray);

// USE 'echo' TO PUT THIS array INTO A HIDDEN input FIELD ON THE PAGE
echo "document.getElementById('jsonArray').value = $jsonArray;";


// LETS ECHO THE NESTED ARRAY TO VERIFY IT WAS CONSTRUCTED CORRECTLY
echo $jsonArray;

这是我的文件中的 HTML 隐藏元素“jsonArray”:

  <input type="hidden" id="jsonArray" />

我在上面所做的回显显示数组如下所示:

  [["first","second","third","fourth"],["first","second","third","fourth"]]

这一切都很好。现在很明显,隐藏的输入字段中存储了一个有效的 2D json 数组。

然后,我对数组执行以下操作 - 将其存储在 session 中,重定向到另一个文件,该文件提取然后回显 2D 数组:

   var xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
// SEE NOTE #1 BELOW ABOUT WHAT THIS SHOWS IN THE ALERT() BOX
alert("The xmlhttp.responseText is: " + xmlhttp.responseText);


window.location = "theViewer.php";
}
}

var arg = "theStored2dimensionArrayAsJson="
+ document.getElementById('jsonArray').value;
xmlhttp.open("POST", "handler.php", true);
xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlhttp.send(arg);

它的作用是将 json 编码的二维数组发送到 handler.php。 handler.php 所做的就是将 json 编码的二维数组保存在 $_SESSION 中:

   // in handler.php
$_SESSION['jsonEncoded2D_Array'] = $_POST['theStored2dimensionArrayAsJson'];

// echo out the array so it appears in the xmlhttp.responseText
echo $_POST['theStored2dimensionArrayAsJson'];


// NOTE #1 -- THIS IS WHAT IS DISPLAYED IN THE xmlhttp.responseText
handler.php, the jsonEncoded2D_Array is:
first,second,third,fourth,first,second,third,fourth

在alert()框中显示xmlhttp.responseText后,我重定向到theViewer.php。我从 SESSION 中检索 2D 数组并回显它:

   // INSIDE theViewer.php
$jsonified_2D_Array = $_SESSION['jsonEncoded2D_Array'];

但是当我回显刚刚从 session 中检索到的“数组”时,它现在是一个字符串,而不是一个数组:

   // THE echo SHOWS THE 2D ARRAY HAS BEEN COVERTED TO A TEXT STRING
// AND IS NO LONGER AN ARRAY
echo "Okay, here is the 2D array:<br />" . $jsonified_2D_Array;

上面的 echo 的输出是这样的:

    Okay, here is the 2D array:
first,second,third,fourth,first,second,third,fourth

我不明白这个。如果您查看上面的代码,我会在将其放入隐藏输入字段后回显该数组,并且它看起来正确,就像一个二维数组。那是在我将其转换为 JSON 之后。

然后我从隐藏字段中取出 JSON 化的 2D 数组,通过 Ajax 将其传递到 handler.php 以保存在 SESSION 中,然后将其从 theViewer.php 中的 SESSION 中取出——然后它不再是一个二维数组——它现在只是一个文本字符串。

我需要将此二维数组保留为二维数组而不是字符串。

这可能吗?我需要 theViewer.php 中的二维数组(不是字符串化数组)。

我在 theViewer.php 中的字符串化数组上尝试了 JSON.parse() 和 eval(),它停止了代码执行,但没有帮助。

最佳答案

$asd = '[["first","second","third","fourth"],["first","second","third","fourth"]]';
var_dump(json_decode($asd));

输出

array(2) {
[0]=> array(4) {
[0]=>
string(5) "first"
[1]=>
string(6) "second"
[2]=>
string(5) "third"
[3]=>
string(6) "fourth"
}
[1]=> array(4) {
[0]=>
string(5) "first"
[1]=>
string(6) "second"
[2]=>
string(5) "third"
[3]=>
string(6) "fourth"
}
}

所以 json_decode() 就是答案

编辑:所以答案是将其括在引号内,如下所示

echo "document.getElementById('jsonArray').value = \'$jsonArray\';"; 

所以ajax会将其视为字符串并且不会删除括号。

关于javascript - 2D json 数组错误地转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22371314/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com