Sol*_*ace 3 javascript php forms post json
在下面的 SSCCE 中,在 中index.php,打印了一个按钮。当你点击这个按钮时,form会提交一个(在buttonJS的点击监听器中),其中包含一个隐藏input字段,其值为json_encode($anArray)。
action表单的属性值为test.php,因此表单被提交到test.php。
在 中test.php,我打印了 的内容$_POST,但得到了这个奇怪的输出:
Array ( [something] => { )
问题是为什么,我该怎么做才能解决它?
第二个问题是,目前test.php在新选项卡中打开,我可以强制它在新窗口中打开吗?
测试.php:
<?php
if (isset($_POST["something"])) {
print_r( $_POST );
} else {
echo '$_POST["something"] is not set.';
}
?>
Run Code Online (Sandbox Code Playgroud)
脚本.js:
$(document).ready(function() {
$("#someButton").click(function() {
window.open('', 'TheWindow'); document.getElementById('TheForm').submit(); });
});
Run Code Online (Sandbox Code Playgroud)
索引.php:
<?php
$dataToPass = array(
"A" => array(
1 => array(
"id" => 1,
"secondId" => 2,
"thirdId" => 3
)
),
"B" => array(
1 => array(
"id" => 4,
"secondId" => 5,
"thirdId" => 6
),
2 => array(
"id" => 7,
"secondId" => 8,
"thirdId" => 9
)
),
"C" => array(
1 => array(
"id" => 10,
"secondId" => 11,
"thirdId" => 12
)
)
);
?>
<!DOCTYPE html>
<html>
<head>
<script src="jquery.min.js"></script>
<script src="scripts.js"></script>
</head>
<body>
<?php
print_r(json_encode($dataToPass));echo "<br><br>";//check
?>
<button id="someButton">Click me</button>
<form id="TheForm" method="post" action="test.php" target="TheWindow">
<input type="hidden" name="something" value="<?php echo json_encode($dataToPass); ?>" />
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
您的<input>标签应如下所示:
<input type="hidden" name="something" value='<?php echo json_encode($dataToPass); ?>' >
Run Code Online (Sandbox Code Playgroud)
请注意对value属性使用单引号字符而不是双引号。JSON 字符串包含双引号字符;您的 HTML 到达浏览器时如下所示:
<input type="hidden" name="something" value="{"A":..." />
Run Code Online (Sandbox Code Playgroud)
这就是为什么你得到的价值是{.
确实,为了确保一切正常(JSON也可以包含单引号),您应该使用 HTML 编码器将任何嵌入的单引号或双引号字符转换为 HTML 实体。这样你就可以保证最终的 HTML 不会混淆 HTML 解析器。
| 归档时间: |
|
| 查看次数: |
1852 次 |
| 最近记录: |