问题: 对js对象和json的区别一直不是很清楚?使用框架通过AJAX向后台传值好像一直使用js对象,后台返回数据是json.
前端向后端传递数据的时候是框架帮我们进行了json的转换吗?
问题: 对js对象和json的区别一直不是很清楚?使用框架通过AJAX向后台传值好像一直使用js对象,后台返回数据是json.
前端向后端传递数据的时候是框架帮我们进行了json的转换吗?
其实json对象也是js对象的一种表现形式,或者说json是限定的js对象也行。说白了,无非就是把key用双引号括起来,value限定为数字、字符串、布尔值和NULL中的一种,再考虑下对象和数组嵌套情况的,比较特殊的js对象而已。所以转换什么的,框架顺便就弄了呗。
用PHP视角来看,JSON就是PHP里的关联数组,就是键值对.
echo json_encode(array( 'A', 'B' )); // ["A","B"]
echo json_encode(array( 0 => 'A', 1 => 'B' )); // ["A","B"]
echo json_encode(array( 0 => 'A', 2 => 'B' )); // {"0":"A","2":"B"}
前端jQuery AJAX传输JSON给后端PHP.
前端:
var arr = {Client:"jQuery",Server:"PHP"}; //键名没有用双引号包围
var str = JSON.stringify(arr); //对象转为字符串后键名被加上了双引号
console.log(str); //输出 {"Client":"jQuery","Server":"PHP"}
var img = {};
$("img").each(function(index, ele){
//console.log("键:"+index+" 值:"+$(ele).attr('src'));
img[index] = $(ele).attr('src');
});
console.log(img); //输出 { 0="//c1.mifile.cn/1.png", 1="//c1.mifile.cn/2.png"}
$.post(
"http://127.0.0.1/test.php", //url:发送请求地址
{name:"ele", pass:"123", json:arr}, //data:待发送的K:V参数
function(data){ //callback:发送成功时的回调函数
console.log(data);
}
);
后端:
<?php
header('Content-Type: text/plain; charset=utf-8');
header('Access-Control-Allow-Origin: http://www.mi.com');
var_export($_POST);
//json:arr时输出
array (
'name' => 'ele',
'pass' => '123',
'json' =>
array (
'Client' => 'jQuery',
'Server' => 'PHP',
),
)
//json:str时输出
array (
'name' => 'ele',
'pass' => '123',
'json' => '{"Client":"jQuery","Server":"PHP"}',
)
//json:img时输出
array (
'name' => 'ele',
'pass' => '123',
'json' =>
array (
0 => '//c1.mifile.cn/1.png',
1 => '//c1.mifile.cn/2.png',
),
)
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
用JSON官网的表述,JSON( (JavaScript Object Notation))是JavaScript对象字面量的一个子集,是一种轻量的数据交换格式。
在接口调用过程中所说的json数据往往不是指js的对象,而是指的json字符串。在js向服务器提交json格式的数据,实质是将js的对象转换成json字符串再放在http请求中进行传递。当接收到服务端响应的json格式的数据时,接收到的也是json字符串,底层会将json字符串转换成js的对象以便操作。