php - 在另一个 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 中接收到数组吗?
提前致谢。
解决方案
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="{"val1":"value1","val2":"value2"}"
要在 PHP 中使用该值,您需要先对其进行解码,htmlspecialchars_decode()
然后再json_decode()
对其进行解码。
但是,我会质疑您为什么首先将这些数据发送到表单。你的服务器不知道它应该得到什么吗?
推荐阅读
- c# - 尝试检查是否有用户输入
- postgresql - 查询 AWS 数据库总是超时
- css - 响应式方形 img(填充底部:100%)在 iOS 上不起作用?
- javascript - 同一条不同颜色/一个条有多种颜色
- javascript - 检查后向断言的兼容性
- python - 即使在调用 pygame.display.update() 后 Pygame 显示也没有更新
- java - 面临将片段转换为活动
- bash - bash 中的“-s”选项是什么?
- swiper - 当我添加一个以上的滑动元素时的奇怪行为
- javascript - 使用 vs 代码扩展进行调试时 test.js 中的 ES6 导入/导出失败并显示“SyntaxError:无法在模块外使用导入语句”