热门:网页模板.net视频教程JQueryMVCjsonExtJs源码示例三级联动JQuery菜单
您现在的位置:.Net中文社区>> AJAX编程>>正文内容

jQuery学习笔记Ajax

发布时间:2010年05月03日点击数: 佚名

关于ajax早已不是新鲜话题,而jQuery使ajax变得无比简单。jQuery提供了若干个ajax函数,他们大同小异,只是为了处理不同类型的数据而分开来。最简单的是get(url,parameters,callback),这个函数发起一个GET请求,将服务器返回的数据传递给callback处理。 下面的例子实现了当鼠标悬浮在超链接上的时候,就发起一个ajax请求,从服务器端返回关于此超链接的更多介绍的效果。先看服务器端代码,新建一个ajaxload.ashx,仅作为示例,获得查询参数为word的值,并返回:

  1. <%@ WebHandler Language="C#" Class="ajaxload" %> 
  2.  
  3. using System; 
  4. using System.Web; 
  5.  
  6. public class ajaxload : IHttpHandler { 
  7.      
  8.     public void ProcessRequest (HttpContext context) { 
  9.         context.Response.ContentType = "text/plain"
  10.         string word = context.Request.Params["word"]; 
  11.         context.Response.Write(string.Format("<p style='color:red;'>More intorduction of {0} is here....</p>",word)); 
  12.     } 
  13.   
  14.     public bool IsReusable { 
  15.         get { 
  16.             return false
  17.         } 
  18.     } 

前台代码如下:

  1. <head> 
  2.     <title>Ajax Text</title> 
  3.      <script type="text/javascript" src="jquery-1.3.2.js"></script> 
  4.     <script type="text/javascript"> 
  5.         $(function() { 
  6.             $('a').hover(function(event) { 
  7.                 $.get('ajaxload.ashx', { word: $(event.target).html() }, function(data) { 
  8.                     $('#result').html(data); 
  9.                 }); 
  10.             }, function() { 
  11.                 $('#result').html(""); 
  12.             }); 
  13.         }); 
  14.     </script> 
  15. </head> 
  16. <body> 
  17. <a href="javascript:void(0)">China</a><br /> 
  18. <a href="javascript:void(0)">USA</a><br /> 
  19. <a href="javascript:void(0)">Japan</a><br /> 
  20. <a href="javascript:void(0)">中 国</a><br /> 
  21. <div id="result"> 
  22. </div> 
  23. </body> 

将鼠标依次滑过Japan和中国,在firebug中可以清楚的看到发起了两次get请求。jquery将参数编码后传递给服务器。在jQuery的帮助下,ajax如此简单。

image

在此例中,服务器端返回了一个html片段,前台所作的工作就是把这个html片段插入到页面中去,实际上,服务器端返回的可以是任何格式的数据,只要在前台做相应的处理即可。在各种数据格式中,尤为常用的是JSON格式。关于JSON格式本身,本文不多做介绍。简单说,JSON格式非常类似于javascript中的对象字面量。{}表示一个对象,[]表示一个数组。
下面来实现一个三级联动下拉菜单。先看下最终效果:

image

这是一个捆绑销售商品选择器,先选择第一个属性Game,再选择Server,最后选择Amount。服务器端如何从数据库查找到合适的数据并且如何将其序列化成JSON数据不是本文讨论的重点。服务器端能响应如下请求,返回的数据也能看到,这些是JSON的典型格式:

image

第一个请求返回Game的列表,第二个请求返回Server的列表,第三个稍微复杂一点,返回了很多信息,其中DisplayName是用来显示在列表中的,ID是列表的value值,其余的没有用到。例如:

  1. <p>  
  2.                     Amount:<select name="SelectAmount" id="SelectAmount"><option value="45">10 Mil</option> 
  3.                    <option value="46">20 Mil</option></select> 
  4. </p> 

下面介绍前台的实现。下拉列表框的HTML代码如下:

  1. <div id="bannerLivechat_content"> 
  2.                 <p> 
  3.                     Game:<select id="SelectGame"></select></p> 
  4.                 <p> 
  5.                     Server:<select id="SelectServer"></select></p> 
  6.                 <p> 
  7.                     Amount:<select id="SelectAmount" name="SelectAmount"></select></p> 
  8.                 <p> 
  9.                     <asp:Button ID="ButtonFasyBuy" CssClass="btn_default" runat="server" Text="BuyNow" 
  10.                         OnClick="ButtonFasyBuy_Click" /> 
  11.                 </p> 
  12.             </div> 

为三个下拉列表写好事件处理函数,首先要加载Game列表:

  1. function LoadGame() { 
  2.              $.getJSON('FastBuy.ashx', function(data) { 
  3.                  var sel = $('#SelectGame')[0]; 
  4.                  sel.innerHTML = ""
  5.                  $.each(data, function(entryIndex, entry) { 
  6.                      var op = new Option(entry); 
  7.                      sel.options.add(op); 
  8.                  }); 
  9.                  $('#SelectGame')[0].selectedIndex = 0; 
  10.                  var game = $('#SelectGame').val(); 
  11.                  LoadServer(game); 
  12.              }); 
  13.          } 

首先清空当前列表,$.each函数能够遍历第一个参数中的每个值,依次调用第二个参数的函数。并把值传给entry参数。此时jQuery已经把JSON数据解析成javascript对象,这里是一个字符串的数组。

  1. function LoadServer(game) { 
  2.              $.getJSON('FastBuy.ashx',{Game:game},function(data) { 
  3.                  var sel = $('#SelectServer')[0]; 
  4.                  sel.innerHTML = ""
  5.                  $.each(data, function(entryIndex, entry) { 
  6.                      var op = new Option(entry); 
  7.                      sel.options.add(op); 
  8.                  }); 
  9.                  $('#SelectServer')[0].selectedIndex = 0; 
  10.                  LoadAmount(game, $('#SelectServer').val()); 
  11.              }); 
  12.          } 

加载Server数据的过程是类似的。

  1. function LoadAmount(game, server) { 
  2.              $.getJSON('FastBuy.ashx', {Game:game,Server:server}, function(data) { 
  3.                  var sel = $('#SelectAmount')[0]; 
  4.                  sel.innerHTML = ""
  5.                  $.each(data, function(entryIndex, entry) { 
  6.                      var op = new Option(entry['AmountAttr'], entry['ID']); 
  7.                      sel.options.add(op); 
  8.                  }); 
  9.              }); 
  10.          } 

最后是加载Amount,这里稍微有一点不同,此时data中的数据不是简单的字符串了,而是一个有属性的对象,可以用entry[‘ID‘]这样的表达式来获取表达式。在这个例子中,entry[‘ID‘]就是一个简单的数字了。当然它完全可以是另一个复杂的对象或者数组,依服务器返回的JSON数据而定。
有了这些准备工作,我们只要在ready函数中为下拉列表注册下处理函数了:

  1. $(document).ready(function() {         
  2.             $('#SelectServer').change(function() { 
  3.                 LoadAmount($('#SelectGame').val(), $('#SelectServer').val()); 
  4.             }); 
  5.             $('#SelectGame').change(function() {                  
  6.                 LoadServer($('#SelectGame').val()); 
  7.             }); 
  8.             LoadGame(); 
  9.          }); 

至此,一个三级联动下拉单完成了。
jQuery还有一个$.post函数,用法和get一样,只是它发起的是post请求。

本站热点业务

更多模板/案例展示

关于我们 | 联系我们 | 团队日志 | 网站地图 | 网站合作