js里面的对象ajax post到php端直接变成数组了?
本帖最后由 zhoumengkang 于 2013-09-12 10:03:14 编辑
事先引入了jquery
var str ="{'a':'b','aa':'bb'}";
var str2 = eval('('+str+')');
var type = typeof(str2);
console.log(str);
console.log(type);//object
console.log(str2);
$.post('./bb.php',{'data':str2});
bb.php的代码
$data = $_POST['data'];
var_dump($data);
控制台上看返回结果,直接输出为数组了
array(2) {
["a"]=>
string(1) "b"
["aa"]=>
string(2) "bb"
}
我一般都是在php端需要json_decode()处理的,这样,不需要解析json格式,直接拿到的是数组了。
虽然一直知道js里对象就类似于php的关联数组,也不明白,这是什么原理呢(js里面的对象ajax post到php端直接变成数组了?)。
------解决方案--------------------is 在执行 $.post 用 Serialize 方法将 {'data':{'a':'b','aa':'bb'}}
转成了 data[a]=b&data[aa]=bb 发送到 php
php 收到 data[a]=b&data[aa]=bb 后,调用 parse_str 函数,将其转换为
array (
'data' =>
array (
'a' => 'b',
'aa' => 'bb',
),
)
赋值给 $_POST 数组
------解决方案--------------------var str2 = eval('('+str+')');这句,确实直接把json转换成了js对象了。
但是,$.post你确定能够发送对象到php上?即使你发送一个数组上去,他也会把数组拆成一个一个的参数发送上去的。
他先把你的对象搞成数组,然后再把数组搞成一个一个参数,然后在php那边一个个参数又合并成一个数组。其实跟你通常看到的get方式参数串差不多,也没听说过get还能get出来一个对象。
纯臆断,欢迎拍砖。