初探jQuery的Ajax特性

来源:互联网 发布:长春数据库工程师招聘 编辑:程序博客网 时间:2024/04/30 01:21

最近刚接触jQuery,初探Ajax功能,完成了一个根据产品分类查询产品的级联下拉列表的功能。下面具体介绍实现过程。

注意:本示例需要jQuery1.2.6的支持。

 

1、下载jQuery1.2.6,并在页面中导入js

  1. <script type="text/javascript" language="javascript" src="js/jquery/jquery-1.2.6.min.js"></script>

2、写一个基于jQuery且可以重用的调用Ajax的方法

  1. // 发送request请求
  2. // 注意:需要jQuery的支持
  3. // url:要请求的URL,如:/xxx/AjaxAction.do
    // data:要请求的参数,与url一起构成一个完整的URL请求,如:method=list&id=123
    // callback:回调函数的名称,如:send_request_callback,请求成功后,会调用send_request_callback函数
  4. function ajax_request(url,data,callback){
  5.     jQuery.ajax({
  6.        type: "POST",    // GET,POST
  7.        url: url,   // AjaxAction.do
  8.        data: data, // method=list&id=123
  9.        success: function(responseText){
  10.            var commond = callback + "(/"" + responseText + "/")";
  11.            eval(commond);
  12.        },
  13.        error: function (XMLHttpRequest, textStatus, errorThrown) {
  14.            alert("Ajax请求失败!");
  15.        }
  16.     });
  17. }

3、完整的页面代码

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  2. <html>
  3. <head>
  4. <title>根据分类查询产品的Ajax实现</title>
  5. <script type="text/javascript" language="javascript" src="js/jquery/jquery-1.2.6.min.js"></script>
  6. <script language="javascript">
  7. // 发送request请求
  8. // 注意:需要jQuery的支持
  9. // url:要请求的URL,如:/xxx/AjaxAction.do
  10. // data:要请求的参数,与url一起构成一个完整的URL请求,如:method=listid=123
  11. // callback:回调函数的名称,如:send_request_callback,请求成功后,会调用send_request_callback函数
  12. function ajax_request(url,data,callback){
  13.     jQuery.ajax({
  14.        type: "POST",    // GET,POST
  15.        url: url,   // AjaxAction.do
  16.        data: data, // method=listid=123
  17.        success: function(responseText){
  18.            var commond = callback + "(/"" + responseText + "/")";
  19.            eval(commond);
  20.        },
  21.        error: function (XMLHttpRequest, textStatus, errorThrown) {
  22.            alert("Ajax请求失败!");
  23.        }
  24.     });
  25. }
  26. // 发送请求
  27. function select_chanpin(){
  28.     // 分类
  29.     var fenlei = document.getElementById("fenlei").value;
  30.     if(fenlei != ""){
  31.         var url = "/AjaxAction.do";
  32.         var data = "method=select_chanpin&fenlei=" + fenlei;
  33.         ajax_request(url,data,"select_chanpin_callback");
  34.     } else {
  35.         document.getElementById("chanpin_span").innerHTML = "<select name='chanpin'><option value=''>请先选择分类</option></select>";
  36.     }
  37. }
  38. // 回调函数
  39. function select_chanpin_callback(responseText){
  40.     // 假设请求回应后返回的是HTML代码串,则直接显示;如果是XML串,还需要解析,这里略去。
  41.     // 返回的HTML代码串示例:<select name='chanpin'><option value='产品一'>产品一</option><option value='产品二'>产品二</option></select>
  42.     document.getElementById("chanpin_span").innerHTML = responseText;
  43. }
  44. </script>
  45. </head>
  46. <body>
  47. 分类:
  48. <select name="fenlei" onchange="select_chanpin()">
  49.     <option value="1">分类一</option>
  50.     <option value="2">分类二</option>
  51.     <option value="3">分类三</option>
  52. </select>
  53. 产品:
  54. <span id="chanpin_span">
  55.     <select name="chanpin">
  56.         <option value="">请先选择分类</option>
  57.     </select>
  58. </span>
  59. </body>
  60. </html>

4、后台AjaxAction的实现

  1. package com.xx.yy.action;
  2. import java.io.UnsupportedEncodingException;
  3. import java.util.HashMap;
  4. import java.util.List;
  5. import java.util.Map;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import org.apache.struts.action.ActionForm;
  9. import org.apache.struts.action.ActionForward;
  10. import org.apache.struts.action.ActionMapping;
  11. import org.apache.velocity.tools.generic.EscapeTool;
  12. import com.dm.wmf.core.ActionContext;
  13. import com.dm.wmf.core.BaseDispatchAction;
  14. import com.dm.wmf.service.CommonService;
  15. import com.dm.wmf.util.RequestUtils;
  16. public class AjaxAction extends BaseDispatchAction {
  17.     /**
  18.      * 查询产品列表
  19.      * @param mapping
  20.      * @param form
  21.      * @param request
  22.      * @param response
  23.      * @param context
  24.      * @return
  25.      * @throws Exception
  26.      */
  27.     @SuppressWarnings("unchecked")
  28.     public ActionForward select_CPMC(ActionMapping mapping, ActionForm form,
  29.             HttpServletRequest request, HttpServletResponse response,
  30.             ActionContext context) throws Exception {
  31.         StringBuffer sb = new StringBuffer();
  32.         EscapeTool esc = new EscapeTool();
  33.         // 分类(名称)
  34.         String fenlei = RequestUtils.getParameter(request, "fenlei"null);
  35.         fenlei = AjaxEncode(fenlei); // 解码,Ajax默认用的是UTF-8编码
  36.         
  37.         // 如果分类不为空
  38.         if(fenlei != null){
  39.             // 根据分类查询产品,可以是从数据库等查询,这里略去
  40.             List chanpin_list = ...;
  41.             
  42.             // 拼接select组件
  43.             sb.append("<select name='chanpin'>");
  44.             for (int i = 0; i < chanpin_list.size(); i++) {
  45.                 Map map = (Map)chanpin_list.get(i);
  46.                 String CPMC = (String)map.get("CPMC");
  47.                 CPMC = esc.html(CPMC); // 此处最好进行转码,否则会出现单引号或双引号等字符,我用的是VelocityTools的EscapeTool转码功能
  48.                 sb.append("<option value='" + CPMC + "'>" + CPMC + "</option>");
  49.             }
  50.             sb.append("</select>");
  51.         } else {
  52.             sb.append("<select name='").append(select_name).append("'>");
  53.             sb.append("<option value=''>Ajax参数不正确</option>");
  54.             sb.append("</select>");
  55.         }
  56.         
  57.         response.setHeader("Cache-Control""no-cache, must-revalidate");
  58.         response.setContentType("text/html;charset=GBK");
  59.         response.getWriter().write(sb.toString());
  60.         
  61.         return null;
  62.     }
  63.     
  64.     /**
  65.      * 对Ajax传过来的字符串进行解码
  66.      * @param str
  67.      * @return
  68.      */
  69.     private String AjaxEncode(String str){
  70.         String ret = null;
  71.         try {
  72.             if(str != null){
  73.                 ret = new String(str.getBytes(),"UTF-8");
  74.             }
  75.         } catch (UnsupportedEncodingException e) {
  76.             e.printStackTrace();
  77.         }
  78.         
  79.         return ret;
  80.     }
  81. }

 

 

 

原创粉丝点击