`
renzhen
  • 浏览: 247801 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

    博客分类:
  • PHP
阅读更多

 

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

      于是我开始研究这段代码,服务器端和客户端,服务器端很简单,就是获取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作为服务器端开发的,就没有办法使用它。

 

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

1
0
分享到:
评论

相关推荐

    JQuery.param

    此资源包是jQuery.param.js。非常好用的js文件,有需要的请放心下载使用。

    jquery.json-editor:基于jquery.json-viewer的json编辑器

    jquery.json-editor A json editor based on . Check out the ! 特性: 语法高亮 支持数据块展开与收起 简单 可编辑 使用 [removed][removed] [removed][removed] /** * 初始化一个 JsonEditor * * @param {DOM|...

    jquery.param.patch.zip

    页面上jQuery需要把一个复杂类型的javascript数组对象作为参数传到Struts2 action,但是他们的默认格式不匹配导致action无法正确获得参数。 Struts2 action class SomeAction{ List<SomeBean> list; //getter...

    jquery3.0.min.js+jquery.param.js+跨域代码Demo

    利用jquery技术和url传参,实现tomcat网页和Webstorm网页之间实现跨域数据传输

    jquery.params.js页面带参数跳转插件

    jquery.params.js页面带参数跳转插件 http://{domain}?{param}=[]&……

    jquery.param.js

    实际开发中,难免会遇到页面之间跳转传参的需要,该js可以用于html页面跳转传参,会更加方便快捷,几行代码就可以搞定

    jquery-param:与jQuery.param等效的功能

    script src =" /path/to/jquery-param.min.js " > </ script >用法CommonJS: const param = require ( 'jquery-param' ) ;const obj = { key1 : { value1 : [ 10 , 20 , 30 ] } , key2 : '?a

    jquery.params.js-2.1.7

    这是一个基于jQuery的插件,名称为jquery.params.js,版本号是2.1.7,这个插件可以在前台进行HTML不同页面间的传值(即不同页面之间值的共享和交换),而不需要和后台进行交互,是一款很实用的插件。

    html页面动态获取连接参数 jquery.params.js

    类似 bb.html?data=1&data2=2这种页面跳转,通过该js可以获取参数 方法:在目标页面,即bb.html中使用一下代码即可: var data=$.query.get("data")

    jquery.params.js

    当你要在两个html页面间传递参数时,有一种方式,就是你在a.html页面使用超链接拼接的方式传递参数并跳到b.html页面。...怎么接收了?...方法来接收,但是这时,就需要引入这个jquery.params.js文件了。

    jquery.param()实现数组或对象的序列化方法

    jQuery.param( obj ): 创建适用于URL查询字符串或Ajax请求的数组,普通对象或jQuery对象的序列化表示形式。 如果jQuery对象被传递,它应该包含具有name / value属性的输入元素。 jQuery.param( obj ): obj: 类型...

    jquery.params.js文件

    jquery.params.js文件html和html之间的数据互传,直接调用jquery.params.

    jQuery.params

    jQuery.query 版本号为:2.1.7,用于html和js开发使用工具

    jquery.params.js传值插件下载

    用于两个html页面间传参 , 不需要经过后台 : 页面一 : url="index.html?name='wang'"; 页面二 : var name = $.query.get('name')

    jquery.params.js,页面传值插件

    封装好的插件,引入这个js就可以直接用,专门用于两个html页面间传参,不需要经过后台: 第一个页面:url="index... 第二个页面:var name = $.query.get('name') 这样就可以简单的获取到第一个页面传过来的参数,使用简单方便

    ibatis-core-3.0.jar org.apache.ibatis.annotations.Param

    搭建mybatis所需包org.apache.ibatis.annotations.Param @Param

    原生JS实现$.param() 函数的方法

    主要介绍了原生JS实现$.param() 函数的方法,由于遇到相关序列化的问题,但是vue项目中由于减少队jquery引用的限制,导致不能用$.param来序列化参数,下面小编给大家分享了实例代码,需要的朋友参考下吧

    jQuery 1.4.1 中文参考

    11.6.1 jQuery.param(obj, [traditional]) 194 11.7 插件编写 196 11.7.1 jQuery.error(message) 196 12. 关于 197 12.1 关于jQuery 中文文档 197 12.2 关于jQuery 1.3 版翻译 197 12.3 关于jQuery 1.2 版翻译 197 ...

    jquery-unparam:一个用于解析jquery.param()字符串的python库

    一个用于解析jquery.param()字符串的python库。 可以这样使用: >>> from jquery_unparam import jquery_unparam >>> request_params = u'a[one]=1&a[two]=2&a[three]=3&b[]=1&b[]=2&b[]=3' >>> print(jquery_...

Global site tag (gtag.js) - Google Analytics