今天在作维护时,遇到一段JQuery旧代码,看得很纠结,大体结构以下: javascript
html代码<form id="myForm" method="post" action="abc.action"> <input type="hidden" name="opID" value="testQry"> .... <input type="submit" id="mySubmit" value="提交"> </form>javascript代码
$("#mySubmit").click(function(){ doSubmit(); }); //提交 function doSubmit(){ $("myForm").submit(function(){ $.post("abc.action?opID=testQry", $("myForm").serialize(), function(data){ alert(data); //...... }); }); }
这段代码主要存在两个方面的问题:
1.表单有重复提交之嫌。
html
$.post()提交时参数opID出现重复。 java
首先看第一个问题,写JS代码的时候,这种重复提交的方式显然是很危险的,若是要使用异步提交表单,则干脆对代码做以下简化:
提交按钮修改成button类型 ajax
<input type="button" id="mySubmit" value="提交">javascript进行简化:
$("#mySubmit").click(function(){ $.post("abc.action?opID=testQry", $("myForm").serialize(), function(data){ alert(data); //...... }); });
这样就去掉了表单submit类型按钮的表单提交及JQuery中的$("myForm").submit方法提交,只保留了ajax这一种提交方式,使代码既简单易理解,也更安全。
第二个问题,其实承接第一个问题,因为参数在ajax提交时名称和值重复(url中 opID=testQry和 $("myForm").serialize() ),因此上面简化后的代码依然提交不了。须要将$.post()中的url参数 opID=testQry去掉,便可。 安全
(原文来自做者博客:http://www.ichatter.cn/2013/05/14/549/) 异步