• 关于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换成其他的值

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

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

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

  • 相关阅读:
    Docker 安装Mysql
    Windows Store APP- C# to get IP Address
    使用eclipse构建maven和发布maven的项目
    eclipse中安装maven的插件
    window下安装和部署maven
    oracle12c的(window版本)安装详解
    Linux配置MySQL
    Linux配置Tomcat
    Linux配置JDK环境变量
    maven创建web项目的报错解决方案
  • 原文地址:https://www.cnblogs.com/CareySon/p/1511965.html
Copyright © 2020-2023  润新知