jquery1.4使用ajax方法时需要注意:序列化方法jQuery.param() 的变化

今天试了一下jquery1.4,我用的版本是jquery-1.4.2.js,在进行ajax传输时发现老是出现乱码,郁闷了好久,网上搜了一下,才知道原来是jquery-1.4中jQuery.param() 方法有一些变化:

参考 http://www.hackhome.com/InfoView/Article_208618_2.html

之前对于{foo: ["bar", "baz"]}序列化后的结果是“foo=bar&foo=baz”,而现在是“foo[]=bar&foo[]=baz”。

见源码5405行-5433行

function buildParams( prefix, obj ) {
	if ( jQuery.isArray(obj) ) {
		// Serialize array item.
		jQuery.each( obj, function( i, v ) {
			if ( traditional || /\[\]$/.test( prefix ) ) {
				// Treat each array item as a scalar.
				add( prefix, v );
			} else {
				// If array item is non-scalar (array or object), encode its
				// numeric index to resolve deserialization ambiguity issues.
				// Note that rack (as of 1.0.0) can't currently deserialize
				// nested arrays properly, and attempting to do so may cause
				// a server error. Possible fixes are to modify rack's
				// deserialization algorithm or to provide an option or flag
				// to force array serialization to be shallow.
				buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v );
			}
		});
					
	} else if ( !traditional && obj != null && typeof obj === "object" ) {
		// Serialize object item.
		jQuery.each( obj, function( k, v ) {
			buildParams( prefix + "[" + k + "]", v );
		});
			
	} else {
		// Serialize scalar item.
		add( prefix, obj );
	}
}

 

这下就知道为什么出现乱码了,因为在jquery源码中jQuery.param()方法是会进行字符编码的,在源码5436行:

function add( key, value ) {
	// If value is a function, invoke it and return its value
	value = jQuery.isFunction(value) ? value() : value;
	s[ s.length ] = encodeURIComponent(key) + "=" + encodeURIComponent(value);
}

 

 

 

这里的中括号“[”,“]”就变成了“%5B”,“%5D”。

 

解决的方法有两个

一、既然是编码不对,那就干脆不让他编码,索性把源码中的5439行

s[ s.length ] = encodeURIComponent(key) + "=" + encodeURIComponent(value);
改为

s[ s.length ] = key + "=" + encodeURIComponent(value);

 

二、前面方法能解决这个问题,不过修改了jquery源码,可能会有不良影响,那我们还可以在后台使用过滤器进行字符编码处理,这样就ok了。

 

一点拙见,高手见笑了

 

 

【K210+STM32项目】基于K210与STM32协同工作的智能垃圾分类系统设计与实现(更新3.0版本)(完整工程资料源码) STM32F407STM32F407_2(含有app功能) 阅读详情

相关推荐

实战指南:UOS专业版命令行高效下载离线安装包及依赖

本文提供了一份UOS专业版离线安装包的实战下载指南。针对无外网环境下的软件部署难题,详细介绍了如何通过命令行精准获取软件包名,并利用`apt download`命令高效下载主程序及其所有依赖。文章重点解析了使用`apt install --dry-run`模拟安装来完整获取依赖包的方法,并给出了离线安装、问题排查及自动化脚本编写等高级技巧,帮助管理员和运维人员实现可靠的批量离线部署。

honey的博客 1109

jq ajax json提交,jquery1.4.3 ajax提交json

问题补充:前台$.ajax({type: "GET",contentType: "application/json",url: "Form.aspx",dataType: "json",data: "userName=" + $("#txtName").val(),beforeSend: function (XMLHttpRequest) {$("#showResult").text("正在查询"...

weixin_36260335的博客 199

从FedAvg到实战:手把手教你用PyTorch复现联邦学习经典论文实验(MNIST/CIFAR-10)

本文详细介绍了如何使用PyTorch复现联邦学习经典算法FedAvg在MNIST和CIFAR-10数据集上的实验。从环境搭建、数据非IID划分到模型实现和参数聚合,手把手教你掌握联邦学习的核心技术与实战技巧,帮助开发者和研究人员快速实现隐私保护的分布式机器学习方案。

weixin_29053695的博客 253

jQuery之ajax学习笔记一

$.param(): console.log($.param({'aaa':'1','bbb':'2'}));//aaa=1&bbb=2 console.log($.param({'aaa':'[','bbb':'2'}));//aaa=%5B&bbb=2 console.log($.param({'aaa':[1,3],'bbb':'2'}));//aaa%5B%5D=1&

Night_Emperor的博客 466

告别校准烦恼:用ADS1220和松下ERA3电阻实现±0.05℃精度的Pt100测温方案(附完整电路图)

本文详细介绍了如何利用TI的ADS1220 24位ΔΣ ADC与松下ERA3系列精密电阻构建±0.05℃精度的免校准Pt100测温系统。通过比例测量法架构和关键器件选型,解决了传统方案中的校准繁琐和长期稳定性问题,特别适用于工业控制、医疗设备等高精度温度测量场景。

weixin_30740581的博客 613

用STM32定时器PWM高级功能驱动步进电机:F103C8T6+TB6600实战教程

本文详细介绍了如何利用STM32F103C8T6微控制器的定时器PWM高级功能驱动TB6600步进电机驱动器,实现高效、灵活的运动控制方案。通过硬件配置、PWM参数计算、运动控制算法及TB6600高级功能应用的全面解析,为工业自动化和精密控制领域提供了实用的技术参考。

game4的博客 186

jQuery源码分析之jQuery.param方法详解

buildParams方法源码: var rbracket = /\[\]$/; function buildParams1( prefix, obj, traditional, add ) { var name; //传入的是一个对象,这里是false if ( jQuery.isArray( obj ) ) { // Serialize array item. //传入

高山上的鱼 5747

SAP公司间STO业务解析(包含主数据解析、后台配置解析、前台业务演示)

SAP公司间STO业务解析

ww114784的博客 1017

jquery中通过ajax调用webservice传递数组参数的问题

如题. 还是直接用例子说明来的直接些. 本人的项目中通过jquery.ajax调用webservice. 客户端代码如下: 1 $.ajax({ 2 url: "test/xxx.asmx", 3 type: 'POST', 4 dataTyp...

dazenduo1760的博客 246

【阿里AgentScope框架】多框架组合:AgentScope加LangChain,让你的开发效率直线上升

本文以一个例子来看下AgentScope框架和LangChain如何实现融合使用,真的超级简单,一看就懂。这是一种思路,为多种框架的融合使用提供借鉴。

同学小张的博客 3471

华为OD新系统机试真题 - 操作历史管理器的撤销/重做能力

华为OD机试新系统真题【操作历史管理器的撤销/重做能力】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【操作历史管理器的撤销/重做能力】

qq_45776114的博客 865

jQuery中通过ajax调用webservice传递数组参数的问题实例详解

下面通过实例给大家说明比较直观些,更方便大家了解。本人的项目中通过jquery.ajax调用webservice.客户端代码如下:?12345678910111213$.ajax({url: "test/xxx.asmx",type: 'POST',dataType: 'xml',timeout: ,data: { name: "zhangsan", tags: ["aa", "bb", "cc"...

满天星的博客 924

AI上推荐 之 AutoInt模型(Transformer开始玩特征交互)

1. 写在前面 这段时间做优化模型的事情,正好和特征交互有关系,这个也是推荐系统里面一直探索的一个方向,从浅层模型的FM, FFM, HOFM, FwFM到深层模型的DNN, PNN, NFM, AFM, DeepFM, DCN, xDeepFM, FiBiNet等,而这次正好借着这次机会, 多看一些有关于特征交叉方向的模型paper, 把一些新的模型或者较为前沿的思想融入进来。 上一篇的FiBinet模型就是在特征交互上一个非常有意思的探索, 通过SENET动态选择有用的交互特征, 然后再用一个双线性交互

Miracle8070 5724

Ajax模仿form表单提交 以及jquery的param()方法

最近项目遇到一个表单参数传递问题: 后台resful接口定义参数接受类型是restEasy的@FormParams  而页面是直接ajax调用接口,没遇到过这种情况,需要接口接收到自己组装的参数体 查了下找到如下解决办法: $http({ method : 'POST', url : '/role/ed

yesicatt的博客 3608

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

jQuery param() 方法

实例 序列化一个 key/value 对象: var params = { width:1900, height:1200 }; var str = jQuery.param(params); $("#results").text(str); 结果: width=1680&height=1050 TIY 实例 输出序列化对象的结果: $("button").click(function(){ $("div").text($.param(personObj)); }); <!DOCTY

极客神殿 933

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

第25节 jQuery中的Ajax(3)

班级:<input type="text" name="stuClass" id="txt3"/>班级:<input type="text" name="stuClass" id="txt3"/>学号:<input type="text" name="stuNo" id="txt1"/>学号:<input type="text" name="stuNo" id="txt1"/>//获取用户名文本框的数据。所在学校:<input type="text" id="txt3"/><br /><br />

苏婳 2425

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

JQuery中serialize()、serializeArray()和param()方法

下面是服务器端的jsp代码: <% request.setCharacterEncoding("UTF-8"); String username = request.getParameter("username"); String content = request.getParameter("content"); out.println(" "+username+" : "+

夜凉如水 1万+

jQuery.param()

jQuery.param() 描述: 创建一个数组或对象序列化的的字符串,适用于一个URL 地址查询字符串或Ajax请求。 添加的版本: 1.2jQuery.param( obj ) obj 类型: Array, Object 用于数组或序列化的对象。 添加的版本: 1.4jQuery.param( obj, traditional ) obj 类型: Array, Object 用于数组或序列化...

qq_44312360的博客 326

serialize()方法

jQuery是在web应用中使用的脚本语言之一,因其具有轻量级,易学易用等特点,已广泛应用,其中的ajax封装简化了我们的应用,对其表单数据序列化用如下方法: 1.serialize()方法   格式:var data = $("#formID").serialize();   功能:将表单内容序列化成一个字符串。   这样在ajax提交表单数据时,就不用一一列举出每一个参数。只需将dat...

sunlizhen的专栏 2万+

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

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

weixin_30932183的博客 613

jQuery serialize()、serializeArray()方法实现表单序列化

serialize() serialize()方法作用于一个JQuery对象,它能够将DOM元素内容序列化为字符串。 与JQuery中其他方法一样,serialize()方法也是作用于一个JQuery对象,它能够将DOM元素内容序列化为字符串,用于ajax请求。通过使用serialize()方法,可以提交本页面的所有域,代码如下: $("#send").click(function(){ ...

wunianisme的博客 1416

JQuery AJax序列化元素

在jQuery中,当我们使用ajax时,常常需要拼装input数据以键值对(Key / Value)的形式发送到服务器,用JQuery的serialize方法可以轻松的完成这个工作,使用这个方法可以将表单序列化为键值对(key1=value1&key2=value2…)后提交。 W3School方法介绍 serialize()方法 1、serialize()方法     该方法通过序列化表单

ld_____的博客 1955

jQuery.param() 函数详解

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33962923的博客 1121

037_jQuery Ajax序列化

1. param()方法 1.1. param()方法创建数组或对象的序列化表示。该序列化值可在进行AJAX请求时在URL查询字符串中使用。 1.2. 语法 $.param(object, traditional) 1.3. 参数 1.4. 框架在解析序列化数字的时候能力有限, 所以当传递一些含有对象或嵌套数组的数组作为参数时, 请务必小心! 2. serialize()方法 2.1. serialize()方法通过序列化表单值, 创建URL编码文本字符串。您可以选择一个或多个表单元素(

aihiao的专栏 329

JQuery Ajax操作常用的API:serializeArray、serialize、param的区别和使用

使用JQuery进行ajax编码的时候,经常会使用到这3个API,本文学习下这3个API的使用方式。如下的HTML片段,如果我们将holder表单下的控件值提交到服务器。就需要用到serialize或者serializeArray了。 $("#holder").serialize()   输出结果是 a=1&b=2&c=3&f=8

aty 2005

jQuery ajax - param() 方法

jQuery ajax - param() 方法 jQuery Ajax 参考手册 实例 序列化一个 key/value 对象: var params = { width:1900, height:1200 }; var str = jQuery.param(params); $("#results").text(str); 结果: width=168

evilcry2012的专栏 753
上一篇: 【转】javascript call apply
下一篇: JavaScript执行顺序的小测试
xlaaa111
博客等级 码龄19年 1粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值