当后端要你提交一个JSON配置信息时

2017-04-04  本文已影响194人  大淀桑浮不起來

JSON ( JavaScript Object Notation )

  1. 前端构造一个JS对象,用于包装要传递的数据,然后将JS对象转化为JSON字符串,再发送请求到后端;
2. 后端PHP接收到这个JSON字符串,将JSON字符串转化为**PHP对象**,然后处理请求。
3. 可以看到,相同的数据在这里有3种不同的表现形式,分别是前端的**JS对象**、传输的**JSON字符串**、后端的**PHP对象**,JS对象和PHP对象明显不是一个东西,但是由于大家用的都是**JSON**来传递数据,大家都能理解这种数据格式,都能把**JSON这种数据格式很容易地转化为自己能理解的数据结构**;

JSON 是 JavaScript 的子集?

// JS对象
let foo = {}; 
// JS对象,只不过你可以把这个称之为JSON格式的 JavaScript对象
let bar = {
  "name": "bar",
  "price": 1000,
  "buyer": [1, 2, 3]
};
//  这个就是JSON格式的字符串
let str1 = JSON.stringify(bar);
let str2 = '{"name": "bar", "price": 1000, "buyer": [1, 2, 3]}';
const postData = {
    "attribution": 1,
    "category": 2,
     "groupid": 3,
    "parentid": 4,
    "shopid": 5,
    "groupname": "foo",
    "config": {
      "tagfilter": [{"id": 123, "name": "group-XX"}],
      "product": [{"id": "123123123123123", "name": "prod-YY"}]
    } 
};
$.ajax({
    url: '/api/xxx/yyy', //api接口地址 
    data: postData, //复杂的配置信息
    contentType: "application/json;charset=utf-8", // 客户端请求格式
    type: 'POST', // 数据传输方式
    dataType: 'json', // 服务端返回数据格式
}).done((res) => {
    if (res.success && res.data) {
      console.log(res.data);
    } else {
      layer.msg(res.msg);
    }
}).fail(() => {
    layer.msg('网络开小差~请稍后再试!');
}).always( ()=> {
    utils.loadingOff();
});

JSON & JavaScript Object?

1. 两个本质不同的东西为什么那么密切?

2. 如何通过AJAX传输复杂的JSON格式呢?

调用$.ajax函数时,即使设置contentTypeapplication/json; charset=utf-8,如果不设置,默认给你一个application/x-www-form-urlencoded 爽歪歪;如果给data属性传递的是一个的JS对象,这时候jQuery也不会将其自动转换为JSON string, jQuery 默认会将给data赋予的对象(除字符串之外的任何东西)处理为适用于”application/x-www-form-urlencoded”的请求字符串。有一个选项processData来控制默认的自动转换,设置其为false,jQuery就不会自动转换对象。

JS 新建一个对象,将复杂的配置信息赋值给这个对象,最后JSON.stringify()一下,将这个JavaScript值转换为一个JSON字符串,那么后端也方便解析,如果你就这么把这个JS对象POST过去,Chrome下就会给你解析成表单提交,如果数据够复杂,让后端解析你的东西都心烦~~~那么你从接口拿到的数据,就会变成字符串了,你就需要用到下面这个方法;

一般用到这个,当然不可能是后端会这么给你复杂数据结构,然后你要parse一下其实,我也见过,一般是要往浏览器里面存储临时信息,再次打开浏览器时就算用户没有通过接口保存,也可以方便记忆上次用户的配置~一般和localStoragesessionStorage搭配~~

上一篇 下一篇

猜你喜欢

热点阅读