`
renzhen
  • 浏览: 251603 次
  • 性别: 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 Ajax向某个页面传值并取得返回的数组

    "jQuery Ajax向某个页面传值并取得返回的数组"这一主题涉及到如何使用jQuery的Ajax方法来发送请求,传递参数,并接收服务器返回的数据,特别是数组类型的数据。 首先,我们需要理解jQuery的Ajax方法`$.ajax()`,这...

    jQuery AJAX 分页

    data: {param1: value1, param2: value2}, // 传递的参数 success: function(response) { // 处理返回的数据 }, error: function() { // 处理错误 } }); ``` ### 2. 数据分页概念 数据分页是将大量数据分成...

    Ajax经典实例大全

    客户端使用jQuery或其他库发送Ajax请求,服务器端C#处理请求并返回结果。 ```csharp [WebMethod] public static string GetData(string param) { return "Server response"; } ``` ### 7. J2EE与Ajax 在Java的...

    ajax中文简易教程

    这个技术由jQuery、Prototype等库广泛采用,使得Web应用能够更快速地响应用户交互,提升用户体验。Ajax的核心是利用JavaScript异步地与服务器进行数据交换,并在客户端更新页面。 **1. Ajax基础概念** - **异步通信...

    Web前端开发中级实操考试评分细则2

    `表示使用单例模式获取数据库连接池,`$connPool->executeSql($sql,$param)`用于执行SQL语句,其中`$param`是参数化的查询值。 7. **控制器和路由**:在试题四中,`UserController@main`可能是Laravel框架中的一个...

    PHP中运用jQuery的Ajax跨域调用实现代码

    本篇文章将详细介绍如何在PHP中利用jQuery的Ajax功能,通过JSONP(JSON with Padding)技术来实现跨域调用。 首先,我们来看标题提到的jQuery的Ajax调用代码: ```javascript function getData() { $.getJSON(...

    ajaxfileupload

    data: {param1: 'value1'}, // 可选的额外参数 success: function(response, status) { console.log('上传成功', response); }, error: function(data, status, e) { console.error('上传失败', data, e); } ...

    ajax代码实现自动补全功能

    服务器根据输入的关键词查询匹配的建议,然后将结果返回给客户端,客户端接收到数据后动态更新DOM结构,展示在搜索框下方。 ### 2. 实现步骤 #### 步骤一:HTML结构 创建一个包含输入框和结果列表的基本HTML结构。...

    jQuery ajax 路由和过滤器使用说明

    然后我们利用zoneAjaxUrl和解析出的路由信息构造出一个新的URL,并且通过jQuery的$.param方法将路由对象转换成URL参数的形式,并覆盖原始的data数据。 在这个示例中,还展示了如何使用$.post、$.get和$.getJSON方法...

    自动补全 autocomplete 例子 支持中文 数据库

    在IT领域,自动补全(Autocomplete)是一种常见的功能,广泛应用于各种文本输入场景,如搜索引擎、编程IDE、操作系统命令行等。它极大地提高了用户输入效率,减少了误输入的可能性。本示例着重介绍如何实现一个支持...

    实现ajax效果实例 很实用 通用

    ` 对于POST请求,需要传入数据,如`xhr.send("param1=value1&param2=value2");` 5. **处理响应**:在响应处理函数中,通过`readyState`属性判断请求状态,`status`属性获取HTTP状态码,`responseText`或`...

    Javashop开发规范V2.2

    1. 客户端json返回值 2. 服务器端方法返回值 3. 数据库是否的标识值 性别 0:女 1:男 6.2 常用名称 名称 英文 商品 goods 货品 product 规格 spec 订单 order 会员 member 积分 point 购物车 cart 结算 checkout ...

    java技术面试-----------javaWeb.md

    - **`<jsp:param>`**:传递参数。 - **`<jsp:include>`**:包含其他页面的内容。与`<%@ include file="... %>`不同,此标签支持动态包含。 - **静态包含**:使用`<%@ include file="..." %>`,只包含静态内容。 - *...

Global site tag (gtag.js) - Google Analytics