1
nosay 2018-08-22 09:55:49 +08:00
formdata 了解一下
|
2
weirdo 2018-08-22 10:05:33 +08:00
php://input
|
3
lianyue 2018-08-22 10:06:37 +08:00 via iPhone
context-type 参数呢
|
4
zjsxwc 2018-08-22 10:11:36 +08:00
|
5
Junjunya OP 楼上说的 都已经知道了, 解决方案也知道,还有没有更加干货一点的东西??
想知道这种情况出现的更深一层的原因,以及未来 PHP 的$_POST 是不是应该默认可以解析这种请求 |
6
eslizn 2018-08-22 10:19:31 +08:00
|
8
jswh 2018-08-22 10:25:31 +08:00
$_POST 里面解析的是 post body 里面 xx=yyy&aaa=bbb 这种格式。axios 发送的是 json,无法解析就无法解析到任何内容。PHP 不会取分辨 header 里面的 content-type, 并更具 content-type 来解析 post body,这个自己封装一下就好了,很多框架里也有这个功能。直接使用$_POST 对于认真写项目来说,本来就不是很好的做法。
|
9
johnj 2018-08-22 10:27:05 +08:00 2
主要你对 POST 请求,参数的几种编码方式没有概念。
起码有这几种(不是学名): form-urlencoded: 参数编码跟 url 上的格式一样 foo=bar&boo2=bar2 数组之类的怎么表达可以查查 multipart: 这种跟传文件的时候用的编码一样,比较复杂,搜一下 json: 请求体内就是个 json 不同的编码 还要不同的 Content-Type 头来配合。 发请求、接收请求的双方,必须对请求的编码方式达成一致,才能正确接收。 |
10
sarices 2018-08-22 10:41:51 +08:00
php://input 了解一下
|
11
lrz0lrz 2018-08-22 11:06:59 +08:00
|
12
otakustay 2018-08-22 11:29:00 +08:00
逻辑很简单嘛,就是 2 个时代的产物相互对接不上,再正常不过了,而且一般来说也应该 php 端去适配 axios
|
13
tinytin 2018-08-22 12:45:21 +08:00
9 楼说得对
|
14
tomczhen 2018-08-22 12:58:46 +08:00 1
简单啊,只要用新技术的统统枪毙打死,这样就能保证兼容了。
|
15
KuroNekoFan 2018-08-22 13:41:39 +08:00
首先 axios 不是 nodejs 这个 runtime 而是 browser 的,另外也跟`httpclient`没什么关系,然后,我觉得这不能说是无法接收,而是接收了却不知道该如何解析
|
16
msg7086 2018-08-22 14:22:23 +08:00
比较现代化的 PHP 4.0 发布于 2001 年。
JSON 标准 RFC 是 2006 年的。 Axios 不知道是哪年的,但是应该不会很早。 所以你说为什么 PHP 不支持 JSON 解析呢?因为那时候还没有 JSON 这玩意儿。而 JSON 诞生之后,再改 PHP 就会有潜在的向前兼容问题,不能乱动了。所以也算是历史原因吧。 |
17
scofieldpeng 2018-08-22 14:23:10 +08:00
你想让$_POST 接收,可以啊,你自己封装出一个来,如果是 content_type=application/json 的时候自己从 php://input 读出值,然后解析后设置到$_POST,不过如果 body 体是一个 array 你就不好玩了,其实这东西有啥纠结的,那我告诉你,get 请求中 body 还给你带参数你是不是更诧异了?
|
18
Junjunya OP @KuroNekoFan 老哥呦
axios 在 git 的 README.md 里面的介绍就是 Promise based HTTP client for the browser and node.js git 地址 https://github.com/axios/axios#axios 人家的定位就是 httpclient,并且 browser 或者 node 环境都可以用 @lrz0lrz 谢谢指导 @otakustay 一般的后端来适配么? 兼容不应该是兼容已经存在的标准么 比如下面这种场景,一个项目 里面有部分接口还是旧的,旧的接口 肯定是能不去修改 就不去修改的。就需要前端来做适配了 |
19
yixiang 2018-08-22 14:29:21 +08:00
#9 说的无误。
这问题跟 node, php, axios 都无关,是 http 协议的事。随手找几个链接: https://www.jianshu.com/p/fbd1ba0a7ce7 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type |
20
otakustay 2018-08-22 14:31:21 +08:00
@Junjunya 因为发 JSON 就是当代的普遍实践,在历史与当前不冲突的时候由当前兼容历史,冲突的时候就直接淘汰历史,车轮总是要前进的
|
21
otakustay 2018-08-22 14:31:38 +08:00
@Junjunya 因为发 JSON 就是当代的普遍实践,在历史与当前不冲突的时候由当前兼容历史,冲突的时候就直接淘汰历史,车轮总是要前进的
|
22
enjoyCoding 2018-08-23 02:40:00 +08:00 via Android
??? 项目中用到 axios,后端 php CI 框架 底层就是用$_POST 接收的 没遇到过你的这个问题啊… 确定是接收不到吗?
|
23
wo642436249 2018-09-03 13:56:56 +08:00
遇到过跨域的问题,没遇到过楼主说的问题
|