这几天做一个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换成其他的值
-----------------------------------------------------------
写在后面:这个问题让我快用头撞墙了.刚开始还以为是灵异现象.重启动了好几次-.-!!
分享一下.希望对大家有帮助.
本文转自CareySon博客园博客,原文链接:http://www.cnblogs.com/CareySon/archive/2009/06/26/1511965.html如需转载请自行联系原作者