首页 > 解决方案 > 在另一个 php 页面中收到时,发送的 JSON 数组为空

问题描述

我将一个数组从 form1.php 发送到 form2.php

<input id="hidden_all_headers" type="hidden" name="hidden_all_headers" value="<?php echo json_encode($all_headers_array); ?>">

form1.php 中的检查器

<input id="hidden_all_headers" type="hidden" name="hidden_all_headers" **value="[" region","countries_of_origin","visits_in_milions","receipts_in_milions_euro","nights_in_thousands","expenditure_per_visit_euro","cost_per_night_euro","average_length_of_stay"]"="">**

看起来不错..但在form2.php中

--html
<input id="hidden_all_headers" type="hidden" name="hidden_all_headers" value="<?php echo json_decode($_POST['hidden_all_headers'],true); ?>">       
</html>
<script type="text/javascript">
var obj = "<?php echo json_decode($_POST['hidden_all_headers']) ?>";
for(var i=0; i<obj.length; i++){
alert(obj[i]);
};
</script>

form2.php 的检查员


-- html

<input id="hidden_all_headers" type="hidden" name="hidden_all_headers" **value=""**>

--script
**var obj = "";**
for(var i=0; i<obj.length; i++){
alert(obj[i]);
};
$('#hidden_all_headers').val(obj);

你能帮我看看为什么我不能在 form2.php 中接收到数组吗?

提前致谢。

标签: phpjson

解决方案


HTML 元素的属性通常应该用双引号括起来(有例外,但这里并不真正适用)。JSON 数据也将其所有键和值都用双引号括起来,因此您的 value 属性如下所示:

value="[" region","countries_of_origin","visits_in_milions","receipts_in_milions_euro","nights_in_thousands","expenditure_per_visit_euro","cost_per_night_euro","average_length_of_stay"]"=""

看看双引号是如何在所有错误的地方打开和关闭的。浏览器无法理解它,所以它忽略了它。

您的解决方案是使用编码 JSON 数据htmlspecialchars()

value="<?php echo htmlspecialchars(json_encode($all_headers_array)); ?>"

所以,从这个开始:

{"val1":"value1","val2":"value2"}

这将为您提供如下值属性:

value="{&quot;val1&quot;:&quot;value1&quot;,&quot;val2&quot;:&quot;value2&quot;}"

要在 PHP 中使用该值,您需要先对其进行解码,htmlspecialchars_decode()然后再json_decode()对其进行解码。

但是,我会质疑您为什么首先将这些数据发送到表单。你的服务器不知道它应该得到什么吗?


推荐阅读