js里面的对象ajax post到php端直接变成数组了?
var str ="{'a':'b','aa':'bb'}";var str2 = eval('('+str+')');var type = typeof(str2);console.log(str);console.log(type);//objectconsole.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端直接变成数组了?)。
回复讨论(解决方案)
var str2 = eval('('+str+')');
var str2 = eval('('+str+')');这是我把字符串转成对象,怎么了?
jquery 在 ajax 操作时会将 json 对象转换成 url 参数串的格式
所以你在 php 可以用正常方式接受
jq 提供有序列化函数 htmlSerialize、Serialize
jquery 在 ajax 操作时会将 json 对象转换成 url 参数串的格式
所以你在 php 可以用正常方式接受
jq 提供有序列化函数 htmlSerialize、Serialize 我是说怎么直接把js对象到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出来一个对象。
纯臆断,欢迎拍砖。
var str2 = eval('('+str+')');这句,确实直接把json转换成了js对象了。
但是,$.post你确定能够发送对象到php上?即使你发送一个数组上去,他也会把数组拆成一个一个的参数发送上去的。
他先把你的对象搞成数组,然后再把数组搞成一个一个参数,然后在php那边一个个参数又合并成一个数组。其实跟你通常看到的get方式参数串差不多,也没听说过get还能get出来一个对象。
纯臆断,欢迎拍砖。 说得很好,收获不少。特别是你的“搞”字用得很到位!
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出来一个对象。
纯臆断,欢迎拍砖。 不知道你还能不能看到,今天在手册上看到这段话,就更加容易理解了:
http://www.php.net/manual/zh/reserved.variables.httprawpostdata.php
post传过来的值应该是:$HTTP_RAW_POST_DATA
而我们用的$_POST是在此基础上格式化了的数据
var str2 = eval('('+str+')');这句,确实直接把json转换成了js对象了。
但是,$.post你确定能够发送对象到php上?即使你发送一个数组上去,他也会把数组拆成一个一个的参数发送上去的。
他先把你的对象搞成数组,然后再把数组搞成一个一个参数,然后在php那边一个个参数又合并成一个数组。其实跟你通常看到的get方式参数串差不多,也没听说过get还能get出来一个对象。
纯臆断,欢迎拍砖。 不知道你还能不能看到,今天在手册上看到这段话,就更加容易理解了:
http://www.php.net/manual/zh/reserved.variables.httprawpostdata.php
post传过来的值应该是:$HTTP_RAW_POST_DATA
而我们用的$_POST是在此基础上格式化了的数据
谢谢,我也研究一下。