jQuery异步提交表单

 <form id="form1" method="post">
<table border="1">
<tr>
<td>用户名:</td>
<td>
<input type="text" name="loginName" /></td>
</tr>
<tr>
<td>爱 好:</td>
<td>
<input type="checkbox" name="cbLoveYy" value="1" />游泳
<input type="checkbox" name="cbLoveYx" value="1" />游戏
<input type="checkbox" name="cbLovePs" value="1" />爬山
</td>
</tr>
<tr>
<td colspan="2" style="text-align: center">
<input id="btnAjaxSubmit" type="submit" value="jQuery.ajax提交" />
</td>
</tr>
</table>
</form>
 <script type="text/javascript">
$(document).ready(function () {
$("#btnAjaxSubmit").click(function () {
var options = {
url: 'async_submit_test1.aspx?action=SaveUserInfo',
type: 'post',
dataType: 'text',
data: $("#form1").serialize(),
success: function (data) {
if (data.length > 0)
$("#responseText").text(data);
}
};
$.ajax(options);
return false;
});
});
</script>

我们通过$("#form1").serialize()将表单元素的数据转化为字符串,然后通过$.ajax()执行异步请求资源。

方案:jQuery.ajax() + .aspx请求

此方案优势:

1)         我们不会感觉页面的“闪一闪”效果

2)         我们不会因为服务器耗时响应而导致出现“百页”的糟糕用户体验。

此方案劣势:

1)         此方案中我还是使用了aspx页面去响应请求,只是在后台通过action参数去做相应处理,尽管是异步操作但却完完整整的跑了一遍ASP.NET页面生命周期(这也是在Response.Write()输出完自己的东西后必须调用Response.End();来提前终止生命周期,否则页面信息也会一起返回)

2)         jQuery库提供的序列化表单字符串方法不能收集文件上传的表单元素,如,$("#form1").serialize()。所以对于包含文件上传的表单我们还需通过<iframe>模拟异步表单提交。(<iframe>模拟异步表单提交的过程我将在分析jQuery.form插件的源码小节进行说明)

(jQuery库提供的序列化字符串的数据来源时表单的elements属性,而<input type=”file” />的表单元素不包含在elements中)

当然jQuery.ajax()也可以结合.ashx文件(一般处理文件)或其他方式实现高效异步请求,这边只是为了说明:异步请求aspx页面也会跑一边aspx页面生命周期的事实。

jQuery.form插件轻松实现表单提交

现在我们使用jQuery的表单插件Jquery.form.js(官网)来实现异步表单提交。

1)         该插件需要Jquery最低版本为v1.5

2)         该插件提供了ajaxSubmit和ajaxForm两种表单提交方式,但不要对同一个表单同时使用两种方式。

现在我将通过“jQuery+jQuery.form插件+ashx(一般处理文件)”来实现一个高效的异步表单提交。

 <form id="form1" action="ajaxOperation.ashx" method="post">
<table border="1">
<caption>jQuery.form.js异步提交方式</caption>
<tr>
<td>用户名:</td>
<td>
<input type="text" name="loginName" /></td>
</tr>
<tr>
<td colspan="2" style="text-align: center">
<button id="btnAjaxSubmit">ajaxSubmit提交</button>
&nbsp;
<input id="btnAjaxForm" type="submit" value="ajaxForm提交" />
</td>
</tr>
</table>
</form>

1)         为<form>标签指定action值,指定使用ajaxOperation.ashx处理该表单请求。

2)         使用两个提交按钮btnAjaxSubmit和btnAjaxForm分别对应jQuery.form插件提供的两种表单提交API。

jQuery表单插件提交代码如下:

 <script type="text/javascript">
$(document).ready(function () {
var options = {
success: function (data) {
$("#responseText").text(data);
}
}; // ajaxForm
$("#form1").ajaxForm(options); // ajaxSubmit
$("#btnAjaxSubmit").click(function () {
$("#form1").ajaxSubmit(options);
});
});
</script>

方案:jQuery.form.js插件 + .ashx请求

此方案优势:

1)         简简单单几句代码,我们就可以实现表单的提交,并且可灵活通过ajaxSubmit()函数基于任何事件的触发实现表单异步提交。

2)         支持文件上传功能,并在新浏览器中支持进度条更新。(在jQuery.form插件源码分析中会进行说明)

3)         与jQuery库完美结合,支持jQuery.ajax()函数触发的各种事件,支持jQuery.ajax()中所传递的参数。(在jQuery.form插件源码分析中会进行说明)

好了,这样短而易读的代码,这样的偷懒方式不正是我们追求的吗?那jQuery.form插件提供的表单提交API是否高效呢?内部又做了些什么?接下来跟着我看看jQuery.form插件内部实现吧。。。

最新文章

  1. Looper.prepare()和Looper.loop()
  2. 3.羽翼sqlmap学习笔记之Cookie注入
  3. 查看数据库磁盘使用多少G:
  4. ArcGIS API for Silverlight加载google地图(后续篇)
  5. 条款10:令operator=返回一个*this的引用
  6. dbutils 执行sql返回的数据类型
  7. fseek/ftell/rewind/fgetpos/fsetpos函数使用-linux
  8. [置顶] What is the difference between Category and Class Extension?
  9. HDU 1256 图片8
  10. 让DIV的滚动条自动滚动到最底部 - 4种方法
  11. POJ 2125 Destroying The Graph [最小割 打印方案]
  12. climbing stairs(爬楼梯)(动态规划)
  13. SQL之left join,inner join,right join
  14. 如何用java实现一个p2p种子搜索(2)-路由表实现
  15. 【ASP.NET Core快速入门】(九) RoutingMiddleware介绍以及MVC引入
  16. 图论分支-Tarjan初步-边双联通分量
  17. python pip 使用时错误: Patal error in launcher:Unable to create process using &#39;&quot;&#39;
  18. NOIP 2000 进制转换
  19. Sql server中如何将表A和表B的数据合并(乘积方式)
  20. mysql学习之路_事物_存储过程_备份

热门文章

  1. js 中与元素有关的高度
  2. Goppa code
  3. java.nio.file.Path
  4. [求助] win7 x64 封装 出现 Administrator.xxxxx 的问题
  5. Docker实践,来自沪江、滴滴、蘑菇街架构师的交流分享
  6. Oracle之常见问题诊断方法
  7. SSH框架搭建
  8. 了解真实的『REM』手机屏幕适配
  9. python虚拟环境
  10. MySQL update时使用联表,聚合