关于JQuery的serialize方法.让我崩溃一天的问题解决了

        这几天做一个Ajax像服务器动态提交的表单然后给出即时反馈.这些表单内容都是一系列的.内容大同小异.所以代码和页面结构也是大同小异.但是其中有一个页面使用AJAX始终无法提取到服务器值.反而将此页的整个render出来的页面显示出来.关键代码如下:

 

Code

后台代码简略如下.只是为了让大家明白意思:

 

Code

 

刚开始我挺奇怪.为什么几个页面都好好的.但是这个页面无论如何也无法收到queryString的值,我干脆将jquery代码重写了一遍.问题依旧.

后来发现在IE里不行.但是在FF里却没事..

用IE的httpwatch插件观察.发现表单无法提取到值.百思不得其解.以为是JQuery库的问题.换了.问题依旧.

上了asp.net的论坛和jquery论坛发邮件.有人说是utf-8编码问题.试了.还是无效-.-!!

最终我只能用“滚雷"的方法,看为什么其他页面行而这个不行.把一个个的html控件挨个删除.然后用httpwatch观察值,最终发现在

 

Code

 

这个html控件上出了问题.如果页面里有这个控件serialize方法就无法提取任何值.

恩.对了.你们也肯定想到了.length是js数组的属性关键字.肯定冲突了.

打开js代码,发现原来serialize是用param方法对serializeArray的一个简单包装.

param方法的js代码:

Code

 

serializeArray方法的jquery定义

 

Code

 

发现问题都不出在这两个函数上.继续跟踪..发现问题出在这serializeArray方法里调用的makeArray方法上

JQuery定义如下

Code

 

自习看makeArray的代码.发现这行

var i = array.length;
问题就处在这

因为变量i是取传入的array数组的长度.

而我们知道.js中的array本质上就是一个对象.所以array["length"]和array.length是同一种东西

所以当我将textbox中的id设置为length时.这时就会和对象的length属性重名.造成变量I在下面的计算中出错.自然就返回空了.

解决方法:将textbox的ID换成其他的值

-----------------------------------------------------------

写在后面:这个问题让我快用头撞墙了.刚开始还以为是灵异现象.重启动了好几次-.-!!

分享一下.希望对大家有帮助.

posted @ 2009-06-26 21:57  CareySon  阅读(36089)  评论(23编辑  收藏  举报