网站地图    收藏   

主页 > 前端 > javascript >

JSONP的数据格式优化

来源:自学PHP网    时间:2014-09-19 14:48 作者: 阅读:

[导读] 下面给大家介绍关于JSONP的数据格式优化的一些小技巧,希望对大家有点帮助。...

在用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<d.length;i++){

        r.list.push({});

        for(var j=0;j<m.length;j++){

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

        }

    };//将数据拼装回去

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

})();//自执行

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

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

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

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

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论