我在JSP中将带有JSON字符串的POST请求发送给PHP但是收到的JSON无法解码。
这是我的html文件:
<html><body>
<form name="frm" method=post action="http://www.test.com/get_json.php">
<input type=hidden id=test name=test>
<input type="submit" value="Submit">
</form>
</BODY></HTML>
<script>
var jsonObj = {
"merchID": "0000",
"amount": "test"
};
var jsonString = JSON.stringify(jsonObj);
document.getElementById('test').value = jsonString;
</script>
这是我的PHP文件:
<?php
echo file_get_contents("php://input");
$data = json_decode(file_get_contents("php://input"));
echo $data['amount'];
?>
echo file_get_contents(&#34; php:// input&#34;); 的输出
DO =%7B%22merchID%22%3A%220000%22%2C%22amount%22%3A%22test%22%7D
这意味着JSON的目标已经成功收到。
这个问题有解决办法吗?
答案 0 :(得分:2)
您没有使用纯JSON请求正文发送请求,而是发送常规的网址编码表单请求。如您的输出所示,请求正文包含表单编码字符串中的JSON字符串 。您需要首先对其进行URL解码,然后从中选择您的JSON字符串。幸运的是,PHP已经为您完成了这项工作,数据在$_POST
:
$data = json_decode($_POST['DO']);
答案 1 :(得分:0)
当你没有在<form method=post
上指定不包含任何文件上传的enctype属性时,默认为application/x-www-form-urlencoded
- 编码,当php收到application/x-www-form-urlencoded
时 - 编码POST请求,它解析请求并将数据放在$_POST
变量中,因为包含javascript的元素名称为“test”,您的json最终位于变量$_POST['test']
中,因此这应该可行:
json_decode($_POST['test']);
- json_decode(file_get_contents("php://input"));
无效的原因,包括php://输入中的数据为application/x-www-form-urlencoded
- 编码,而不是json编码的事实。鉴于PHP已经在$ _POST变量中为你解码了它,你不需要手动解码,但如果你出于某种原因想要这样做,那么php有parse_str
函数来解码{{ 1}} - 编码数据,所以你也可以这样做:
application/x-www-form-urlencoded