首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > PHP >

js里边的对象ajax post到php端直接变成数组了

2013-09-12 
js里面的对象ajax post到php端直接变成数组了?本帖最后由 zhoumengkang 于 2013-09-12 10:03:14 编辑事先

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出来一个对象。

纯臆断,欢迎拍砖。

热点排行