js 数组 ajax php,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);//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是在此基础上格式化了的数据

谢谢,我也研究一下。

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值