随着ajax技术运用越来越频繁,个人对该技术有了一定的经验。
该篇文章主要总结一下关于php和ajax之间的数据传递问题,其他的不做探讨,个人浅见。
目前php和ajax数据的传递主要是通过 JSON 来进行的。
首先,我们要说明一下php后台和前台ajax的数据只能通过字符串的数据类型来传递(据我理解,不对欢迎拍砖)。那为什么又要JSON呢 ?
实际上JSON 只是提供一种数据的内部的格式规范,该格式类似于JS的对象,所以js很好处理JSON格式。再次声明JSON不是数据类型,而是一种格式!
比方说:TXT文档是一种文件数据类型,但是里面的内容格式是什么样的呢? 这里说的字符串就是数据类型,JSON就是一种数据格式,二者并不冲突。
然后,我们来看数据传递:
A . ajax 向 后台php传递数据
$.ajax({
url:***,
type:"post",
data:jdata,
success:.....
})
上述代码中的 jdata 变量,应该是一个JSON 格式的字符串,即使他不是字符串,在浏览器数据传输时,也会被转化为字符串,那么php该如何处理它呢?
例如: jdata={name:"jack"};
那么php后台 就可以通过 $_POST['name'] 来获取“jack”这个字符串。
这是最简单的情况,实际情况要比这复杂的多!
1. 对象中包含对象,如何处理?
假如:
var obj={age:11,sex:0};
jdata={name:"jack",arr:obj};
首先在前端必须进行处理,浏览器只能自行处理一级的对象,将其转化为字符串,出现了二级对象,浏览器可能
无法正常转换。利用浏览器中JSON对象的方法stringify, 将obj转换为json格式的字符串。
obj = JSON.stringify(obj);
输出为:
{“age”:11,"sex":0}
那么php又该怎么处理 $_POST['arr']呢 ?
是的,用 json_decode($_POST['arr'])将 $_POST['arr'] 转变为php对象,
如果想转化为php数组呢 ?
用 json_decode($_POST['arr'],true)将自动转化为关联数组。
2. 如果需要传递的数据 jdata是一个数组,怎么传递?
jdata['name']="jack";
jdata["age"]=11;
此时最好将jdata转换为对象,在进行传递。
B. php向前端ajax 传递数据
在php端:一般php向前端ajax传递数据,都会使用json_encode将变量序列化为JSON格式的字符串。
例如:
$a=array("1","2","3");
$a=json_encode($a);
在前端ajax:
而 ajax收到该数据,并不能直接使用,而要首先使用 JSON.parse(data),将它反序列化为 JS 对象,然后才可以在直接在js中使用的对象。
例如:
var str = '{"name":"huangxiaojian","age":"23"}'
结果:
JSON.parse(str)
- age: "23"
- name: "huangxiaojian"
- __proto__: Object