Home >Backend Development >PHP Tutorial >js里面的对象ajax post到php端直接变成数组了?

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

WBOY
WBOYOriginal
2016-06-23 14:22:481363browse

本帖最后由 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是在此基础上格式化了的数据

谢谢,我也研究一下。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn