各种AJAX方法的使用比较(5)

本文收集了在ASP.NET平台上,一些具体代表性的AJAX开发方法,我将用实际的示例代码来演示如何使用它们,让您感受AJAX的进化历程,同时也希望将一些优秀的AJAX开发方法介绍给您。

批量输入控件的提交(用jQuery.form实现)

再来展示另一个现实的例子,批量输入界面的提交。

页面表单代码如下:

 
 
  1. <form id="form1" action="/AjaxDemo/BatchAddCustomer.cspx" method="post">  
  2.     <p><b>批量新增客户资料</b></p>  
  3.     <table border="0">  
  4.     <tr><td>Name</td><td>Age</td><td>Address</td><td>Tel</td><td>Email</td></tr>  
  5.     <tr><td><input type="text" name="Name" class="Name" value="A1" /></td>  
  6.         <td><input type="text" name="Age" class="Age" value="20" /></td>  
  7.         <td><input type="text" name="Address" class="Address" value="武汉" /></td>  
  8.         <td><input type="text" name="Tel" class="Tel" value="12345678" /></td>  
  9.         <td><input type="text" name="Email" class="Email" value="test1@163.com" /></td></tr>  
  10.     <tr><td><input type="text" name="Name" class="Name" value="A2" /></td>  
  11.         <td><input type="text" name="Age" class="Age" value="20" /></td>  
  12.         <td><input type="text" name="Address" class="Address" value="上海" /></td>  
  13.         <td><input type="text" name="Tel" class="Tel" value="22222222" /></td>  
  14.         <td><input type="text" name="Email" class="Email" value="" /></td></tr>  
  15.     <tr><td><input type="text" name="Name" class="Name" value="A3" /></td>  
  16.         <td><input type="text" name="Age" class="Age" value="20" /></td>  
  17.         <td><input type="text" name="Address" class="Address" value="武汉" /></td>  
  18.         <td><input type="text" name="Tel" class="Tel" value="" /></td>  
  19.         <td><input type="text" name="Email" class="Email" value="test3@163.com" /></td></tr>  
  20.     <tr><td><input type="text" name="Name" class="Name" value="" /></td>  
  21.         <td><input type="text" name="Age" class="Age" value="" /></td>  
  22.         <td><input type="text" name="Address" class="Address" value="" /></td>  
  23.         <td><input type="text" name="Tel" class="Tel" value="" /></td>  
  24.         <td><input type="text" name="Email" class="Email" value="" /></td></tr>  
  25.     <tr><td><input type="text" name="Name" class="Name" value="A5" /></td>  
  26.         <td><input type="text" name="Age" class="Age" value="" /></td>  
  27.         <td><input type="text" name="Address" class="Address" value="" /></td>  
  28.         <td><input type="text" name="Tel" class="Tel" value="12345678" /></td>  
  29.         <td><input type="text" name="Email" class="Email" value="" /></td></tr>  
  30.     </table>  
  31.     <p>说明:每行数据只有当Name,Age,Tel有效时,整行数据才有效。</p>  
  32.     <input type="submit" name="batchAddCustomer" value="保存客户资料" />  
  33. </form>  

JavaScript代码:

 
 
  1. <script type="text/javascript">  
  2. $(function(){  
  3.       
  4.     $("#form1").ajaxForm({  
  5.         success:function(result){  
  6.             $("#output").val(result);  
  7.         }  
  8.     });  
  9. });  

服务端代码如下:

 
 
  1. public class BatchSubmitCustomer  
  2. {  
  3.     public string[] Name { getset; }  
  4.     public string[] Age { getset; }  
  5.     public string[] Address { getset; }  
  6.     public string[] Tel { getset; }  
  7.     public string[] Email { getset; }  
  8. }  
  9. [Action]  
  10. public string BatchAddCustomer(BatchSubmitCustomer input)  
  11. {  
  12.     List<Customer> list = new List<Customer>();  
  13.     forint i = 0; i < input.Name.Length; i++ ) {  
  14.         if( input.Name[i].Length > 0 && TryToInt(input.Age[i]) > 0 && input.Tel[i].Length > 0 ) {  
  15.             Customer c = new Customer {  
  16.                 Name = input.Name[i],  
  17.                 Age = TryToInt(input.Age[i]),  
  18.                 Address = input.Address[i],  
  19.                 Tel = input.Tel[i],  
  20.                 Email = input.Email[i]  
  21.             };  
  22.             list.Add(c);  
  23.         }  
  24.     }  
  25.  
  26.     return XmlHelper.XmlSerialize(list, Encoding.UTF8);  
  27. }  
  28. // 还可以采用下面的方法来处理表单数据  
  29. [Action]  
  30. public string BatchAddCustomer2(string[] name, string[] age, string[] address, string[] tel, string[] email)  
  31. {  
  32.     return BatchAddCustomer(new BatchSubmitCustomer {  
  33.         Name = name,  
  34.         Address = address,  
  35.         Age = age,  
  36.         Email = email,  
  37.         Tel = tel  
  38.     });  
  39. }  

这个示例的全部代码就这么多,废话不想多说,您自己去想用其它方法需要多少代码!

提交复杂表单(用jQuery.form实现)

前面的示例都是直接提交表单,没有验证表单的过程,而且都以Textbox控件为主,再来个复杂的表单示例。

页面表单代码如下:

 
 
  1. <form id="form1" action="/AjaxDemo/AddProduct.cspx" method="post">  
  2. <p><b>商品基本资源录入</b></p>  
  3. <table style="border: 0px">  
  4. <tr><td>商品分类:</td><td><select name="CategoryId" style="width: 300px">  
  5.         <option value="1" selected="selected">手机</option><option value="2">计算机</option>  
  6.         <option value="3">衣服</option><option value="4">生活用品</option>  
  7.     </select></td></tr>  
  8. <tr><td>商品名称:</td><td><input type="text" name="ProductName" style="width: 300px" value="" /></td></tr>  
  9. <tr><td>库存单位:</td><td><select name="Unit" style="width: 100px">  
  10.         <option value="个" selected="selected">个</option><option value="双">双</option>  
  11.         <option value="箱">箱</option><option value="只">只</option>  
  12.     </select>  
  13.     &nbsp;&nbsp;&nbsp;  
  14.     单价:<input type="text" name="Price" style="width: 120px" value="123.45" />  
  15.     </td></tr>  
  16. <tr><td>销售方式:</td><td>  
  17.     <label><input type="radio" name="SaleMode" value="0" checked="checked" />零售</label>  
  18.     <label><input type="radio" name="SaleMode" value="1" />批发</label>  
  19.     </td></tr>  
  20. <tr><td></td><td></td></tr>  
  21. <tr><td></td><td></td></tr>  
  22.  
  23. <tr><td>可选颜色:</td><td>  
  24.     <label><input type="checkbox" name="Colors" value="Red" checked="checked" />红色</label>  
  25.     <label><input type="checkbox" name="Colors" value="Green" />绿色</label>  
  26.     <label><input type="checkbox" name="Colors" value="Blue" checked="checked" />蓝色</label>  
  27.     <label><input type="checkbox" name="Colors" value="White" />白色</label>  
  28.     <label><input type="checkbox" name="Colors" value="Black" />黑色</label>  
  29.     </td></tr>  
  30. <tr><td>备注信息:</td><td>  
  31.     <textarea name="Remark" cols="20" rows="50" style="width: 300px; height: 50px">http://www.cnblogs.com/fish-li</textarea>  
  32.     </td></tr>  
  33. </table>  
  34. <br />  
  35. <input type="submit" name="submit" value="提交" />  
  36.  
  37. </form>  
  38.  

JavaScript代码:

 
 
  1. <script type="text/javascript">  
  2. $(function(){   
  3.     $("#form1").ajaxForm({  
  4.         beforeSubmit: ValidateForm,  
  5.         success:function(result){  
  6.             $("#output").val(result);  
  7.         }  
  8.     });  
  9.     function ValidateForm(formData, jqForm, options) {   
  10.         if( jqForm.context.ProductName.value.length == 0 ){  
  11.             alert("商品名称不能为空。");  
  12.             $(jqForm.context.ProductName).focus();  
  13.             return false;  
  14.         }  
  15.         return true;  
  16.     }  
  17. });  
  18. </script> 

服务端代码:

 
 
  1. [Action]  
  2. public string AddProduct(Product product)  
  3. {  
  4.     // 简单地返回一个XML字符串。  
  5.     // 告诉客户端:服务端收到了什么样的数据。  
  6.     return XmlHelper.XmlSerialize(product, Encoding.UTF8);  
  7. }  

各种AJAX开发方法的对比与总结

看过了这些示例后,我们再来回顾这些AJAX方法的进化过程:

1. 以ASP.NET AJAX为代表的【生成客户端代理脚本调用服务端】技术,为了包装原始AJAX的复杂过程,服务端为客户端生成了代理脚本,这种封装后的客户端在调用方式上与服务端基本一致,看起来简化了不少,而且降低了开发门槛,然而,它的优点也是它是它的最大缺点:服务端包办了客户端的事情,它完全没有想到客户端技术也在进步!当更优秀的前端技术出现时,它的结局只能是淘汰。

2. 【jQuery直接调用WebService】可以看做是第一代技术的改进,它丢弃了服务端生成代理脚本的功能,直接在客户端准备服务端所需要的数据格式,借助jQuery内部对XmlHttpRequest的封装,也能方便地调用服务端。这种方法解决了客户端、服务、页面三方的耦合,但是数据格式却受到序列化方式的限制,使得起来怪怪的。这种怪怪的感觉其实也是不方便的表现。

3. 为了让前端更方便地调用服务端,服务端框架只能改变,ASP.NET MVC框架和MyMVC框架都支持更简单的数据格式,而且不需要那个多余的asmx文件,直接用类库就可以响应客户端请求。这类技术的最主要特点是:用更简单的数据格式就可以调用服务端。由于数据格式简单化,为以后的继续改进留下了机会。

4. 由于服务端不要求序列化的数据格式,且前端技术仍在进步,终于jQuery.form插件可以让我们不需要关注表单数据的收集过程,它能模拟浏览器的提交行为,正确识别【成功控件】并将它们提交到服务端,因此代码得到最大限度的缩减,让AJAX开发过程更加容易。

前面几个采用jQuery.form的示例也让我们看到:不管表单是什么样的,永远只需要一个调用。

而且它将jQuery的调用过程也做了非常好的封装,所以我认为这是最容易使用的AJAX开发方法。

相关链接

1. jQuery: http://jquery.com/

2. jQuery.form: http://jquery.malsup.com/form/

3. MyMVC: http://www.cnblogs.com/fish-li/archive/2012/02/12/2348395.html

点击此处下载示例代码

原文链接:http://www.cnblogs.com/fish-li/archive/2013/01/13/2858599.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值