PHP应用客户端传复杂参数,JSON vs jQuery.param

 

      最近,我们的网站系统出现了问题,一个保存布局的功能时不时的失效,严重影响了项目的进度,于是我接下了这个问题,查看问题的所在。

      于是我开始研究这段代码,服务器端和客户端,服务器端很简单,就是获取data参数,用json反序列化成一个数据结构然后处理,相反客户端js的代码写的很长,也比较乱。其实客户端的代码就是一个构造json字符串的过程,可能是出于效率的原因,原来的实现者没有先构造数据,然后序列化,而是直接使用字符串的拼接,而其中的变量没有做字符过滤,导致json字符串在服务器端无法解释出错。知道问题了,解决起来就很简单了。不过这个问题引起了我对js客户端传复杂结构的思考。

      一般的ajax,对服务器上传的参数固定和简单,直接通过参数a=1&b=2就解决了,那你就不需要看下去了。如果你的应用比较复杂,有时候需要传的参数是一个数据结构,那么可以往下使用以下的方法,JSON or jQuery.param。

 

1. JSON

JSON已经是web应用的标准数据交换协议了,基于文本,通用性很好,基本上所有的主流语言都能序列化和反序列化,可以交换复杂的数据结构。主流的高版本浏览器都提供了对JSON内置的支持。一些看起来都是那样的完美,不过他真的完美吗?

令人沮丧的是这种方案的问题竟然出在js客户端上,IE6 7不支持JSON,而主流的js框架jquery也没有内置对json序列化的支持。如果你使用jquery,而且要兼容IE低版本浏览器,你就不得不引入额外的json库,或者自己构建。

我个人倾向于使用专业的json库,因为json库会优先使用浏览器内置实现,性能上没有太大的劣势,而手动实现错误率极高,不好掌控。js中比较好的json序列化时JSON之父douglas crockford写的代码(这一类的库很少),开源的,可以通过如下网址下载:https://github.com/douglascrockford/JSON-js

 

2.jquery.param

我们知道,http参数本身是不支持数组等复杂数据的直接传递的,不过PHP扩展了对参数的解析,通过[]的扩展达到传递复杂数据结构的目的,在js中,主流的框架都实现了对象转参数的功能,在jquery中可以使用jquery.param,对于使用jquery(或其他有类似功能的类库),服务器端支持扩展参数解析(如PHP、Rails),又不想重新加入新的js类库的,可以考虑用这个方法。

这个方法最大的问题时服务器端,对于Java作为服务器端开发的,就没有办法使用它。

 

         对于客户端传复杂类型到服务端,要根据现有的情况合理的选择合适的技术,才能得到更好的效果。

你可能感兴趣的:(jquery,数据结构,json,PHP,应用服务器)