亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > AJAX > 正文

AJAX實例入門

2024-09-01 08:26:13
字體:
來源:轉載
供稿:網友

  一、開門見山

  這些時間,瞎子也看得見,AJAX正大踏步的朝我們走來。不管我們是擁護也好,反對也罷,還是視而不見,AJAX像一陣潮流,席轉了我們所有的人。

  關于AJAX的定義也好,大話也好,早有人在網上發表了汗牛充棟的文字,在這里我也不想照本宣科。

  只想說說我感覺到的一些優點,對于不對,大家也可以和我討論:

  首先是異步交互,用戶感覺不到頁面的提交,當然也不等待頁面返回。這是使用了AJAX技術的頁面給用戶的第一感覺。

  其次是響應速度快,這也是用戶強烈體驗。

  然后是與我們開發者相關的,復雜UI的成功處理,一直以來,我們對B/S模式的UI不如C/S模式UI豐富而苦惱?,F在由于AJAX大量使用JS,使得復雜的UI的設計變得更加成功。

  最后,AJAX請求的返回對象為XML文件,這也是一個潮流,就是WEB SERVICE潮流一樣。易于和WEB SERVICE結合起來。

  好了,閑話少說,讓我們轉入正題吧。

  我們的第一個例子是基于Servlet為后臺的一個web應用。

  二、基于Servlet的AJAX

  這是一個很常見的UI,當用戶在第一個選擇框里選擇ZHEJIANG時,第二個選擇框要出現ZHEJIANG的城市;當用戶在第一個選擇框里選擇JIANGSU時,第二個選擇框里要出現JIANGSU的城市。

  首先,我們來看配置文件web.xml,在里面配置一個servlet,跟往常一樣:

xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">


SelectCityServlet
com.stephen.servlet.SelectCityServlet



SelectCityServlet
/servlet/SelectCityServlet


  然后,來看我們的JSP文件:




MyHtml.html




  第一眼看來,跟我們平常的JSP沒有兩樣。仔細一看,不同在JS里頭。

  我們首先來看第一個方法:getResult(stateVal),在這個方法里,首先是取得XmlHttpRequest;然后設置該請求的url:req.open("GET",url, true);接著設置請求返回值的接收方法:req.onreadystatechange = complete;該返回值的接收方法為――complete();最后是發送請求:req.send(null);

  然后我們來看我們的返回值接收方法:complete(),這這個方法里,首先判斷是否正確返回,如果正確返回,用DOM對返回的XML文件進行解析。關于DOM的使用,這里不再講述,請大家參閱相關文檔。得到city的值以后,再通過buildSelect(str,sel)方法賦值到相應的選擇框里頭去。

  最后我們來看看Servlet文件:

import java.io.IOException;
import java.io.PrintWriter;

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

/**
* @author Administrator
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class SelectCityServlet extends HttpServlet {


  public SelectCityServlet() {
  super();
  }

  public void destroy() {
  super.destroy();
  }

  public void doGet(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {
  response.setContentType("text/xml");
  response.setHeader("Cache-Control", "no-cache");
  String state = request.getParameter("state");
  StringBuffer sb=new StringBuffer("");
  if ("zj".equals(state)){
  sb.append("hangzhouhuzhou");
  } else if("zs".equals(state)){
  sb.append("nanjingyangzhousuzhou");
  }
  sb.append("
");
  PrintWriter out=response.getWriter();
  out.write(sb.toString());
  out.close();
  }
}

  這個類也十分簡單,首先是從request里取得state參數,然后根據state參數生成相應的XML文件,最后將XML文件輸出到PrintWriter對象里。

  到現在為止,第一個例子的代碼已經全部結束。是不是比較簡單?我們進入到第二個實例吧!這次是基于JSP的AJAX的一個應用。

  三、基于JSP的AJAX

這個例子是關于輸入校驗的問題,我們知道,在申請用戶的時候,需要去數據庫對該用戶性進行唯一性確認,然后才能繼續往下申請。

  這種校驗需要訪問后臺數據庫,但又不希望用戶在這里提交后等待,當然是AJAX技術大顯身手的時候了。

  首先來看顯示UI的JSP:




Check.html




  所有的JS都跟上一個例子一樣,不同的只是對返回值的操作,這次是用alert來顯示:alert(http_request.responseText);

  我們來看處理邏輯JSP:

<%@ page contentType="text/html; charset=gb2312" language="java" errorPage="" %>
<%
String username= request.getParameter("username");
if("educhina".equals(username)) out.print("用戶名已經被注冊,請更換一個用戶名。");
else out.print("用戶名尚未被使用,您可以繼續。");
%>

  非常簡單,先取得參數,然后作處理,最后將結果打印在out里。
  我們的第三個例子仍然以這個唯一性校驗為例子,這次結合Struts開發框架來完成AJAX的開發。

  四、基于Struts的AJAX

  首先,我們仍然是對Struts應用來做配置,仍然是在struts-config,xml文件里做配置,如下:

  scope="request" path="/ajax/check">
  


  跟普通的Struts應用的配置一樣,只是沒有ActionForm的配置。

  下面是Action類:

package com.ajax;

import java.io.PrintWriter;

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

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.DynaActionForm;

/**
* @author Administrator
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class CheckAction extends Action
{
public final ActionForward execute(ActionMapping mapping, ActionForm form,
  HttpServletRequest request,
  HttpServletResponse response)
throws Exception
{
  System.out.println("haha...............................");
  String username= request.getParameter("username");
  System.out.println(username);
  String retn;
  if("educhina".equals(username)) retn = "Can't use the same name with the old use,pls select a difference...";
  else retn = "congraducation!you can use this name....";
  PrintWriter out=response.getWriter();
  out.write(retn);
  out.close();
  return mapping.findForward("success");
}
public static void main(String[] args)
{
}
}

  我們可以看到里面的邏輯跟上例中Servlet里的邏輯一樣。最后,我們來看看JSP:




Check.html




  我們可以看到,JSP基本是一樣的,除了要發送的url:ajax/check.do?username=' username。

  最后,我們來看一個基于Struts和AJAX的復雜一些的例子,如果不用AJAX技術,UI的代碼將十分復雜。

  五、一個復雜的實例

  這是一個比較復雜的級聯:一共八個列表框,三個下拉框。從第一個列表框里選擇到第二個列表框里后,第一個選擇框里的選項是第二個列表框的選擇;然后,在第一個選擇框里選擇以后,與選擇值關聯的一些選項出現在第三個列表框里。從第三個列表框里選擇選項到第四個列表框里,同樣,第二個選擇框的選項也是第四個列表框的選項;如果對第二個選擇框進行選擇后,與選擇值關聯的一些選項出現在第六個列表框里,依次類推……

  這個UI的邏輯就比較復雜,但使用了AJAX使得我們實現起來就簡單多了,這個例子我們除了使用Action類,還要用到POJO類和Business類,然后我們擴展的話,可以通過Business類和數據庫連接起來。

  我們還是先看配置文件:

  scope="request" path="/ajax/select">
  

然后看看Action類:

/*
/**
* Title : Base Dict Class
* Description : here Description is the function of class, here maybe multirows
* Copyright: Copyright (c) 2004
* @company Freeborders Co., Ltd.
* @Goal Feng   
* @Version   1.0
*/

package com.ajax;

import java.io.PrintWriter;
import java.util.List;

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

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

/**
* @author Administrator
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class SelectAction extends Action
{
public final ActionForward execute(ActionMapping mapping, ActionForm form,
  HttpServletRequest request,
  HttpServletResponse response)
throws Exception
{
  response.setContentType("text/xml");
  response.setHeader("Cache-Control", "no-cache");
  String type = request.getParameter("type");
  String id = request.getParameter("id");
  System.out.println(id);
  StringBuffer sb=new StringBuffer("");
  PrintWriter out=response.getWriter();
  out.write(sb.toString());
  out.close();
  System.out.println(sb.toString());
  return mapping.findForward("success");
}
public static void main(String[] args)
{
}
}

  POJO類和Business類:
package com.ajax;
/**
* @author Administrator
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class SelectForm
{
private String text;
private String value;

/**
* @return Returns the text.
*/
public String getText()
{
return text;
}
/**
* @param text The text to set.
*/
public void setText(String text)
{
this.text = text;
}
/**
* @return Returns the value.
*/
public String getValue()
{
return value;
}
/**
* @param value The value to set.
*/
public void setValue(String value)
{
this.value = value;
}
public static void main(String[] args)
{
}
}


package com.ajax;

import java.util.ArrayList;
import java.util.List;

/**
* @author Administrator
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class SelectBusiness
{
public List getData(String id)
{
ArrayList list = new ArrayList();
for(int i=1;i<6;i )
{
  SelectForm form = new SelectForm();
  form.setText(id i);
  form.setValue(id i);
  list.add(form);
}
return list;
}

public static void main(String[] args)
{
}
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文亚洲视频在线| 久久久99免费视频| 欧美激情视频网址| 国产欧美va欧美va香蕉在| 欧美乱大交做爰xxxⅹ性3| 国产精品欧美日韩一区二区| 国产高清视频一区三区| 亚洲一区二区三区xxx视频| 久久久免费在线观看| 亚洲黄色成人网| 亚洲欧美日韩中文视频| 97精品国产aⅴ7777| 国产精品一区av| 狠狠做深爱婷婷久久综合一区| 久久久久久久一区二区三区| 青草青草久热精品视频在线网站| 中文字幕一区二区精品| 久久久精品久久久久| 亚洲自拍av在线| 98精品在线视频| 国产综合福利在线| 一区二区三区 在线观看视| 97视频在线观看免费高清完整版在线观看| 欧美伊久线香蕉线新在线| 中文字幕亚洲情99在线| 欧美日韩国产精品一区二区三区四区| 国产福利精品在线| 欧美性xxxxx极品| www.日韩欧美| 久久久www成人免费精品| 欧美日韩电影在线观看| 国产99久久精品一区二区 夜夜躁日日躁| 亚洲欧美日韩国产成人| 91久久嫩草影院一区二区| 91精品久久久久久久久久| 高清视频欧美一级| 精品一区精品二区| 久久av红桃一区二区小说| 国产精品白嫩美女在线观看| 日韩在线观看网址| 九色成人免费视频| 海角国产乱辈乱精品视频| 国产一区二区黄| 成人天堂噜噜噜| 国产精品久久久久一区二区| 欧美激情乱人伦| 久久久久久91| 九九久久综合网站| 精品国产一区二区三区久久狼5月| 91久久久久久| 久久久久久久久网站| 亚洲国产精品久久久| 欧美伦理91i| 91久久久久久久一区二区| 亚洲一区二区三区在线视频| 久久五月天色综合| 国产+人+亚洲| 九九九久久久久久| 国产精品一区二区3区| 亚洲专区中文字幕| 91久久精品美女高潮| 欧美激情va永久在线播放| 色妞一区二区三区| 97精品欧美一区二区三区| 北条麻妃99精品青青久久| 国产视频999| 亚洲视频日韩精品| 国产精品久久久久久亚洲调教| 在线精品高清中文字幕| 久久精品欧美视频| 亚洲欧美一区二区三区情侣bbw| 日本精品一区二区三区在线播放视频| 日韩有码在线视频| 亚洲成人1234| 91精品视频大全| 色婷婷av一区二区三区久久| 成人在线精品视频| 黄色一区二区三区| 日韩av中文在线| 日韩中文字幕免费看| 国产欧美va欧美va香蕉在线| 揄拍成人国产精品视频| 欧美一级免费看| 91精品国产乱码久久久久久久久| 亚洲美女动态图120秒| 亚洲老司机av| 一区国产精品视频| 国产精品精品视频一区二区三区| 日韩视频在线免费| 欧美在线视频一二三| 久久久久久久久国产精品| 国产欧美精品一区二区三区-老狼| 91精品国产91久久久久| 国产成人综合精品| 91av在线网站| 欧美有码在线观看| 97精品国产91久久久久久| 亚洲色图五月天| 国产精品美女网站| 国产精品美乳一区二区免费| 中文日韩在线视频| 日本午夜在线亚洲.国产| 国产精品免费久久久久影院| 日韩在线观看网站| 久久精品视频播放| 欧美国产日韩一区| 久久久久久久久久久国产| 久久99精品国产99久久6尤物| 中文国产亚洲喷潮| 日韩中文字幕在线免费观看| 91精品国产91| 92裸体在线视频网站| 日本久久91av| 欧美性生交xxxxxdddd| 日韩av成人在线| 亚洲天堂网在线观看| 国产在线视频2019最新视频| 亚洲成色777777女色窝| 久久777国产线看观看精品| 中文字幕亚洲欧美一区二区三区| 欧美亚洲国产视频小说| 欧美中文在线字幕| 国产成人精品久久| 午夜精品一区二区三区在线| 国产在线一区二区三区| 日本电影亚洲天堂| 亚洲va欧美va在线观看| 欧美日韩综合视频网址| 一本色道久久88综合亚洲精品ⅰ| 高清欧美电影在线| 日韩av一卡二卡| 国产va免费精品高清在线| 久久躁狠狠躁夜夜爽| 57pao国产成人免费| 自拍偷拍亚洲欧美| 欧美成人久久久| 欧美精品激情blacked18| 97精品一区二区三区| 亚洲第一福利网| 欧美贵妇videos办公室| 亚洲电影免费观看高清完整版在线| 91天堂在线观看| 国产精品久久久av| 国产在线999| 国内精品一区二区三区| **欧美日韩vr在线| 欧美在线观看网址综合| 国产日韩在线免费| 欧美大人香蕉在线| 国产精品视频自拍| 日韩中文有码在线视频| 日韩精品中文字| 欧美一级在线亚洲天堂| 伊人久久久久久久久久| 日韩在线国产精品| 美乳少妇欧美精品| 5566成人精品视频免费| 欧美日韩精品二区| 欧美日韩国产在线看| 欧美性xxxx| 久久久在线视频| 国产午夜精品视频免费不卡69堂| 精品少妇v888av| 精品国产电影一区|