php 无法获取客户端传来的值,求大婶

2016-04-20 09:02:42 +08:00
 lyp111332
客户端通过 post 方式发送 json 到服务器,我这里用$_POST 方法接收,但是打印出来却为空。第二种办法我用 file_get_contents("php://input");方式接收,但是我能直接返回 json 给他,但是还是打印不出来。请问下这是怎么回事
4694 次点击
所在节点    PHP
35 条回复
zztao
2016-04-20 09:06:32 +08:00
$_POST 接受到的参数不是 application/json, 而是 url-encode 。打印可以啊,不过你要变为 json 的话得注意 json_decode 的第二个参数。默认 false 解析为 Object , true 解析为 Array
lyp111332
2016-04-20 09:13:54 +08:00
@zztao 打印不了,客户端那边传过来没有键值对,我这里根本无法打印$_POST[]也就是方括号里面的值不知道是什么, 直接 echo $_POST 也无法打印
yangqi
2016-04-20 09:16:56 +08:00
@lyp111332 $_POST 是数组,你当然 echo 不了了,你贴点代码吧,这样空说谁知道怎么回事。
Yiiiii
2016-04-20 09:18:21 +08:00
@lyp111332 你使用 php 输入流 试试看 file_get_content('php://input')
GTim
2016-04-20 09:19:37 +08:00
`file_get_contents('php://input', 'r');`
qgy18
2016-04-20 09:29:37 +08:00
你可以看下这个:
https://imququ.com/post/four-ways-to-post-data-in-http.html

但也有些服务端语言还没有支持这种方式,例如 php 就无法通过 $_POST 对象从上面的请求中获得内容。这时候,需要自己动手处理下:在请求头中 Content-Type 为 application/json 时,从 php://input 里获得原始输入流,再 json_decode 成对象。一些 php 框架已经开始这么做了。
lyp111332
2016-04-20 09:33:41 +08:00
@GTim
@Yiiiii
@yangqi 这些使用过了,<?php$c = file_get_contents("php://input");echo ($c);>我这样子打印出来,客户端那边就能收到我打印出来的乱码了,但是我这里网页上显示不出来。 使用 var_dump 打印也一样没有数组为 0
Delbert
2016-04-20 09:41:39 +08:00
dump 呢?
lyp111332
2016-04-20 09:42:36 +08:00
@Delbert 一样 完全没有信息显示在网页上 ,我是用谷歌浏览器
qgy18
2016-04-20 09:45:38 +08:00
抓包看请求有响应没。

网页不显示,不一定是没数据,如果用 jquery 一类的 ajax 发请求,响应的 content-type 不对也不解析。
yangqi
2016-04-20 09:46:16 +08:00
@lyp111332 你客户端怎么传数据的?
server
2016-04-20 09:48:21 +08:00
content-type 问题, php post 只处理 application/x-www-form-urlencoded 。可以参看 laravel yii restful 实现方案。
lyp111332
2016-04-20 09:49:23 +08:00
@yangqi 用 http 协议 post 请求
tagtag
2016-04-20 09:58:25 +08:00
没太明白你说的意思,他调你因为他给你 post 了,所以他能看到你的 echo ,你自己运行自己代码没传参数,所以啥都没有,不正常吗?
tagtag
2016-04-20 09:59:19 +08:00
他调你的时候你 error_log 下,或者断点下
xqin
2016-04-20 10:04:29 +08:00
@lyp111332 无码无真相,请提供你提交数据至后端的 JS 代码,以及你后端的 php 代码.
sfree2005
2016-04-20 10:25:00 +08:00
试下这个: json_decode(urldecode($_POST['data']),true);
xqin
2016-04-20 10:32:16 +08:00
@lyp111332 根据你的描述做了一个简单的 Demo, 没发现有什么不能输出的.
Demo: https://xqin.net/temp/json_test.html

html 代码:
```

<script src="//js.xqin.net/jquery-1.7.1.min.js" type="text/javascript"></script>
<script src="//js.xqin.net/jquery.json-2.3.min.js" type="text/javascript"></script>

<script type="text/javascript">
$.ajax('json_test.php', {
type: 'POST',//POST
contentType : 'application/json',//发送 JSON 格式的数据
data: $.toJSON({t: Math.random()}),// $.toJSON 在 jquery.json 中定义
success: function(v){
alert(v);//输出服务器返回的内容
}
});
</script>
```

php 代码
```
<?php
echo file_get_contents('php://input');
```
laoyuan
2016-04-20 10:40:07 +08:00
基本上,我有点看明白了, LZ 一次请求,想在两个地方看到。
b821025551b
2016-04-20 11:05:49 +08:00
贴码吧,这样我们怎么猜

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/272427

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX