只是小人物

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

jquery对ajax编程的支持
 1、序列化元素:
 serialize():将jquery对象包含的
 表单或者表单控件转换成查询字符串
 serializeArray():转换为一个数组,每个数组元素形如{name:fieldName,value:fieldVal}的对象。
 序列化元素的作用,主要是用于ajax请求中,给data赋值。
 
 2、三个方法
  1)load(url,[data]): 将服务器返回的数据直接插入到符合
  要求的节点之上。
   url: 服务器上的组件的地址
   data:发送给服务器的请求参数:
    string: "username=zs&&age=22"
    object: {"username":"zs","age",22}
   
   2)$.get(url,[data],[callback],[type]):其中,callback格式 function(data,statusText)
     url: 服务器上的组件的地址
     data:发送给服务器的请求参数:
    string: "username=zs&&age=22"
    object: {"username":"zs","age",22}
   callback: 回调函数,包含两个参数,第一个参数
   是服务器返回的数据,第二个参数是状态。
   type:服务器返回的数据类型
     text: 文本内容
     json: json字符串
     xml: xml文档
     script: javascript脚本
     html: html内容
    $.post()格式同上。
  3)$.ajax(options):options是一个形如
  {key1:value1,key2:value2...}的js对象,用于指定
  发送请求的选项。
  选项参数如下:
  url(string):请求地址
  type(string):GET/POST
  data(object/string):发送到服务器的数据
  (这儿可以使用serialize()或者serializeArray()方法)
  dataType(string) :预期服务器返回的数据类型
     text: 文本内容
     json: json字符串
     xml: xml文档
     script: javascript脚本
     html: html内容
  success(function):请求成功后调用的回调函数,
  有两个参数:
       function(data,textStatus),其中,
       data是服务器返回的数据,可以是html,text,jsonObj,xmlDoc
       textStatus 描述状态的字符串。
  error(function):请求失败时调用的函数,
  有三个参数:
   function(xhr,textStatus,errorThrown)
   xhr: 底层的XmlHttpRequest对象
   textStauts:错误状态
   errorThrown:错误状态
  async: true(默认值)/false,当值为true时,发送
  异步请求,当值为false时,发送同步请求。
  
  
例子1:
stock.jsp

<%@page pageEncoding="utf-8" 
contentType="text/html;charset=utf-8" %>
<html>
 <head>
  <style>
   #d1{
    width:500px;
    height:300px;
    border:1px solid red;
    background-color:#fff8dc;
    margin:30px auto;
   }
  </style>
  <script type="text/javascript" src="js/jquery-1.4.3.js">
  </script>
  <script type="text/javascript">
   function quoto(){
    $('tbody').html('');
    $.post('quoto.do',function(data){
     //data:服务器返回的数据,
     //如果返回的数据是json字符串,会自动
     //转换成javascript对象或者javascript对象
     //组成的数组
     for(i=0;i<data.length;i++){
      $('tbody').append(
      '<tr><td>' 
      + data[i].stockNo 
      + '</td><td>' + data[i].stockName 
      + '</td><td>' + data[i].price 
      + '</td></tr>');
     }
    },'json');
   }
   $(function(){
    setInterval(quoto,1000);
   });
  </script>
 </head>
 <body style="font-size:30px;">
  <div id="d1">
   <div id="d2">实时股票价格信息</div>
   <div id="d3">
    <table width="100%" border="0" cellpadding="0" cellspacing="0">
     <thead>
      <tr><td>股票代码</td><td>股票名称</td><td>报价</td></tr>
     </thead>
     <tbody>
     </tbody>
    </table>
   </div>
  </div>
 </body>
</html>

 


例子2:
car.jsp

<%@page pageEncoding="utf-8" 
contentType="text/html;charset=utf-8" %>
<html>
 <head>
  <style>
   #d1{
    width:500px;
    margin-left:50px;
    margin-top:40px;
   }
   #tips{
    display:none;
    background-color:#fff8dc;
    border:1px dotted red;
   }
  </style>
  <script type="text/javascript" src="js/jquery-1.4.3.js">
  </script>
  <script type="text/javascript">
   $(function(){
    
    $('#s1').change(function(){
     $('tbody').html('');
     $.ajax({
      url:'<%=request.getContextPath()%>/carInfo.do',
      type:'post',
      //data:{'carName':$('#s1').val()},
      data:$('#s1').serializeArray(),
      //data: carName = $('#s1').val(),
      //data:$('#s1').serialize(),
      dataType:'xml',
      success:function(data1){
       //data1:服务器返回的数据
       //如果返回的是json字符串,会自动
       //转换成javascript对象或者数组
       //如果返回的是xml,会将其转换成
       //一棵xml dom树,可以使用jQuery
       //提供的遍历方法,比如parent,children,find
       //来访问棵树
       //为了方便遍历,要使用$(data1),将其包装成
       //一个jQuery对象。 
       $('tbody').append(
       '<tr><td>长度:' 
       + $(data1).find('size').text() 
       +'车重:' 
       + $(data1).find('weigth').text() 
       + '</td><td>排汽量:' 
       + $(data1).find('vol').text()
        + ' 加速性能:' 
        + $(data1).find('speed').text() 
        + '</td><td>车门数:' 
        + $(data1).find('doors').text() + 
        ' 颜色:' + $(data1).find('color').text() 
        + '</td></tr>');
        $('#tips').show();
        setTimeout(function(){
         $('#tips').hide();
        },3000);
       },
      error:function(){
       alert('系统出错');
      }
     });
    });
    
    
    
   });
  </script>
 </head>
 <body style="font-size:30px;">
  <div id="d1">
   <div>热门suv精选</div>
   <div>
    <select style="width:150px;" name="carName" id="s1" 
    style="font-size:40px;">
     <option value="bmwx6">bmw x6</option>
     <option value="benz550">benz 550ml</option>
     <option value="canye">卡宴</option>
    </select>
   <div>
   <div id="tips">
    <table cellpadding="0" cellspacing="0"
    width="100%">
     <thead>
      <tr style="background-color:#cccccc"><td>基本参数</td><td>发动机</td><td>其它</td></tr>
     </thead>
     <tbody>
     </tbody>
    </table>
   </div>
  </div>
 </body>
</html>

 

例子3:
order.jsp

<%@page pageEncoding="utf-8" 
contentType="text/html;charset=utf-8" %>
<html>
 <head>
  <script type="text/javascript" src="js/jquery-1.4.3.js">
  </script>
  <script type="text/javascript">
   $(function(){
    $('.s1').toggle(function(){
     //使用遍历的方式找到航班号
     var airline = 
     $(this).parent().siblings().eq(0).text();
     //使用ajax向服务器发请求
     //$(this).next()
     //.load('price.do','airline=' + airline);
     $(this).next().load('price.do',
     {'airline':airline});
     $(this).html('显示经济舱价格');
    },function(){
     $(this).next().empty();
     $(this).html('显示全部价格');
    });
   });
  </script>
 </head>
 <body style="font-size:30px;">
  <table  cellpadding="0" 
  cellspacing="0" border="1">
   <tr><td>航班号</td><td>机型</td><td>起飞时间</td><td>到达时间</td><td>&nbsp;</td><td>经济舱价格</td><td>&nbsp;</td></tr>
   <tr><td>ca1008</td><td><a href="#">767</a></td><td>8:00</td><td>10:00</td><td><a href="javascript:;" class="s1">显示所有票价</a><div></div></td><td>¥1200</td><td><input type="button" value="订票"/></td></tr>
   <tr><td>mu2000</td><td><a href="#">320</a></td><td>6:00</td><td>9:00</td><td><a href="javascript:;" class="s1">显示所有票价</a><div></div></td><td>¥800</td><td><input type="button" value="订票"/></td></tr>
  </table>
 </body>
</html>

 

共用的ActionServlet.java

package web;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONArray;
import bean.Stock;

public class ActionServlet extends HttpServlet {
 public void service(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  request.setCharacterEncoding("utf-8");
  response.setContentType("text/html;charset=utf-8");
  PrintWriter out = response.getWriter();
  String uri = request.getRequestURI();
  String action = uri.substring(uri.lastIndexOf("/"),
    uri.lastIndexOf("."));
  if(action.equals("/price")){
   System.out.println("price...");
   String airline = request.getParameter("airline");
   String airlineInfo = "";
   if(airline.equals("ca1008")){
    airlineInfo = "头等舱:¥2400<br/>商务舱:¥2000";
   }else{
    airlineInfo = "头等舱:¥2000<br/>商务舱:¥1600";
   }
   out.println(airlineInfo);
  }else if(action.equals("/quoto")){
   //模拟生成10支股票信息
   List<Stock> stocks = 
    new ArrayList<Stock>();
   Random r = new Random();
   for(int i=0;i<10;i++){
    Stock s = new Stock();
    s.setStockNo("s1000" + i);
    s.setStockName("深发展" + i);
    s.setPrice(r.nextInt(100));
    stocks.add(s);
   }
   //将stocks内容转换成json字符串
   JSONArray arry = 
    JSONArray.fromObject(stocks);
   String str = arry.toString();
   System.out.println(str);
   out.println(str);
  }else if(action.equals("/carInfo")){
   //模拟一个错误
   if(1==2){
    throw new ServletException("some error");
   }
   //将车的信息以xml文档的方式发送给客户端
   response.setContentType(
     "text/xml;charset=utf-8");
   String carName = request.getParameter(
     "carName");
   System.out.println("carName:" + carName);
   StringBuffer sb = new StringBuffer();
   sb.append("<car>");
   if(carName.equals("bmwx6")){
    sb.append("<basic><size>4.8</size><weigth>2t</weigth></basic>");
    sb.append("<enginee><vol>3.2</vol><speed>5s</speed></enginee>");
    sb.append("<other><doors>5</doors><color>red</color></other>");
   }else if(carName.equals("benz550")){
    sb.append("<basic><size>5.1</size><weigth>2.5t</weigth></basic>");
    sb.append("<enginee><vol>4.2</vol><speed>4s</speed></enginee>");
    sb.append("<other><doors>5</doors><color>yellow</color></other>");
   }else{
    sb.append("<basic><size>4.6</size><weigth>1.9t</weigth></basic>");
    sb.append("<enginee><vol>2.2</vol><speed>7s</speed></enginee>");
    sb.append("<other><doors>5</doors><color>blue</color></other>");
   }
   sb.append("</car>");
   out.println(sb.toString());
  }
  out.close();
 }

}

 

xml配置:

 <servlet-mapping>
    <servlet-name>ActionServlet</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

 


  
 
使用到的Stock.java类

package bean;

public class Stock {
 private String stockNo;
 private String stockName;
 private double price;
 public double getPrice() {
  return price;
 }
 public void setPrice(double price) {
  this.price = price;
 }
 public String getStockName() {
  return stockName;
 }
 public void setStockName(String stockName) {
  this.stockName = stockName;
 }
 public String getStockNo() {
  return stockNo;
 }
 public void setStockNo(String stockNo) {
  this.stockNo = stockNo;
 }
}

 

posted on 2012-08-06 13:17  只是小人物  阅读(353)  评论(0编辑  收藏  举报