jsonp返回的数据格式有什么要求|JSONP的数据格式优化

更新时间:2019-01-15    来源:js教程    手机版     字体:

【www.bbyears.com--js教程】

在用JSON传递数据时有一个问题,就是在传递列表时,字段名过于重复,浪费了带宽,降低了效率。比如:

 代码如下

{

    data:[

        {name:”张三”,idcard:””…},

        {name:”李四”,idcard:””…}

    ]

}

数据有多少条,”name”和”idcard”这两个字符串就有多少套,那么是否可以简化一下?

在JSONP模式中只需要给一个方法传入数据,而这个数据不一定是直接的数据变量,在javascript里可以通过自调用匿名函数返回数据,所以可以把这个匿名函数当成入参传给这个方法:

 代码如下

SomeFunction(    (function(){return data;})()    );

对于客户端网页来说,只要传入的数据格式正确就可以,至于是数据还是函数返回值并不关注,但是对于服务器端,如果返回函数,就可以做很多事情,而且这些事情客户端是无法拒绝的(因为跨域),其中包括刚才讨论到的数据key冗余问题。

key冗余问题,最容易想到的就是将key抽取出来,在函数自执行的时候再拼回去,所以可以定义两个变量用于存key值和数据,再通过for循环拼装,代码如下:

 

 代码如下

(function(){

    var m=[“name”,”idcard”];//用于存key名

    var d=[[“张三”,””],[“李四”,””]];//完全用于储存数据,没有key,没有浪费

    var r={list:[]};//用于返回结果

    for(var i=0;i

        r.list.push({});

        for(var j=0;j

            r.list[i][m[j]]=d[i][j];

        }

    };//将数据拼装回去

    try{return r;}finally{}//返回客户端要的数据

})();//自执行

如果字段名都很短而且数据条数少的话,就不需要这么麻烦,直接返回数据就可以,当数据量较多,这种方式就比较实用了。

另外,在finally里面可以放额外的代码,比如:

finally{alert(“虽然您访问的是163,但是数据是从baidu来的哦!”)}

显然163对此无能为力:)至于这里面放什么东西就取决于业务需要了。这种格式暂且称之为JSONPM吧(JSONP Metadata extraction)。

本文来源:http://www.bbyears.com/wangyezhizuo/47278.html