盘问一个关于JS AJAX POST Json数据,PHP接收数据的方法

php中文网
发布: 2016-06-13 12:03:42
原创
1580人浏览过

询问一个关于JS AJAX POST Json数据,PHP接收数据的方法
先说一下,我是直接用JS,没有用其他库,所以麻烦大家不要用其他库来做为例子
问题是这样,我用JS脚本写了一个AJAX方法如下

<br />var pageNow=this.className.substr(4);<br />var dID=document.getElementById("dID").value;<br />var url="OOXX";<br />var jsonData={<br />		"HdType":"3",<br />		"dID":dID,<br />		"content":content<br />		};<br />var data={data:jsonData};<br /> var contentType="application/json";<br />var ajax=new Simple.Ajax("POST", url, receive4, data,contentType); //receiveInfo是一个方法名<br />ajax.SendRequest();<br />
登录后复制

里面Simple.Ajax是封装好了的,方法中receive4是AJAX回调方法,contentType是数据头,data就是我要发送的数据.大概能看得懂吧..
我举个例子,之前我用POST发送简单数据的时候,data的格式就是"key1=value1&key2=value2"这样,然后服务端用PHP的获取方法就是$_POST["key1"],或者$_POST["key2"]这样子
现在考虑到value1或者value2的值本身就可能包含"&"这个符号,所以想用JSON一次把整个对象POST到服务器,但是现在有个问题,不知道怎么用PHP去获取这个数据,我用$_POST["data"]获取到的是空的,直接print_r($_POST)也没有得到数据,请问如何通过PHP获取数据?
------解决方案--------------------
由于你没告诉我们你的 Simple.Ajax 是如何写的,那么也只能从原理上说一下
1、如果使用 post 方式发送,那么必须有 Content-Type = application/x-www-form-urlencoded 的声明
否则 php 不会将出传入的数据解析到 $_POST 数组
你发了一个 contentType = application/json 的声明,即便你的 Simple.Ajax 会自动补上一个 Content-Type = application/x-www-form-urlencoded 的声明。这两个相佐的声明也会使 php 无所适从
2、你发送的数据是 {data:jsonData},这是一个 js 对象。即使能够发送成功,php 也会因为不认识这个对象,而无法解析。凡是与外界进行交换的数据结构,都需要按双方约定的格式序列化成字符串

假定你的 Simple.Ajax 可以将 js 的对象转换成 JSON 格式串
并且你也去掉了 contentType = application/json 的声明
那么你在 $_POST 中可以看到以那个 JSON串为键的元素
如果你坚持不愿意去掉 contentType = application/json 的声明
或许你个用 file_get_contents('php://input') 取到传入的内容

------解决方案--------------------
如果有 Content-Type=application/json 声明,$_POST 是不会有数据的
------解决方案--------------------
file_get_contents('php://input') 
但不保证能成功

application/json 只是服务器给使用者用的,告诉用户:你可把内容解释成一个 json 对象
就好比 image/png 是说这是一个 png 图片一样

而用户向服务器发送数据时,只有
application/x-www-form-urlencoded
multipart/form-data
text/plain
三种声明

相关标签:
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号