ajax

1.ajax概述

  • Ajax:(Asynchronous JavaScript And XML)指異步 JavaScript 及 XML
    不是一種新的編程語言,而是一種用于創(chuàng)建更好更快以及交互性更強(qiáng)的 Web 應(yīng)用程序的技術(shù)径密,是基于JavaScript享扔、XML、HTML戚啥、CSS新用法锉试。

  • Ajax:只刷新局部頁面的技術(shù)

    • JavaScript:更新局部的網(wǎng)頁
    • XML:一般用于請(qǐng)求數(shù)據(jù)和響應(yīng)數(shù)據(jù)的封裝
    • XMLHttpRequest對(duì)象:發(fā)送請(qǐng)求到服務(wù)器并獲得返回結(jié)果
    • CSS:美化頁面樣式
    • 異步:發(fā)送請(qǐng)求后不等返回結(jié)果呆盖,由回調(diào)函數(shù)處理結(jié)果
  • JavaScript中XMLHttpRequest對(duì)象是整個(gè)Ajax技術(shù)的核心,它提供了異步發(fā)送請(qǐng)求的能力宙项。

  • 不同瀏覽器株扛,甚至相同瀏覽器的不同版本,獲取該對(duì)象的方式是不同的盆繁。

<script type="text/javascript">
    //1.創(chuàng)建XMLHttpRequest對(duì)象
    function getXMLHttpReuest() {
        var xmlhttp;
        if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp = new XMLHttpRequest();
        } else {// code for IE6, IE5
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        return xmlhttp;
    }
    
    window.onload = function() {
        //2.獲取XMLHttpRequest對(duì)象
        var req = getXMLHttpReuest();
        //alert(req);//驗(yàn)證XMLHttpRequest是否獲取成功
        
        //5.處理響應(yīng)結(jié)果
        req.onreadystatechange=function(){
            //alert(req.readyState);//查看鏈接狀態(tài)
            if(req.readyState==4){
                //alert(req.status);//查看服務(wù)器端相應(yīng)狀態(tài)
                if(req.status==200){//服務(wù)器響應(yīng)正常
                    alert(req.responseText);//得到響應(yīng)結(jié)果
                }
            }
        }
        
        //3.建立鏈接油昂,共3個(gè)參數(shù):get或post請(qǐng)求冕碟、請(qǐng)求路徑匆浙、默認(rèn)true為異步請(qǐng)求,false為同步請(qǐng)求
        req.open("get","${pageContext.request.contextPath }/ajaxServlet",true);
        //4.發(fā)送請(qǐng)求:get方式值為null
        req.send(null);
    }
</script>

2.ajax方法及屬性

  • 常用方法
方法名 說明
open(method,URL,async) 建立與服務(wù)器的連接method參數(shù)指定請(qǐng)求的HTTP方法,典型的值是GET或POST我衬,URL參數(shù)指請(qǐng)求的地址挠羔,async參數(shù)指定是否使用異步請(qǐng)求埋嵌,其值為true或false
send(content) 發(fā)送請(qǐng)求,content參數(shù)指定請(qǐng)求的參數(shù)
setRequestHeader(header,value) 設(shè)置請(qǐng)求的頭信息
  • 常用屬性
    • onreadystatechange:指定回調(diào)函數(shù)
    • readyState: XMLHttpRequest的狀態(tài)信息
就緒狀態(tài)碼 說明
0 XMLHttpRequest對(duì)象沒有完成初始化范舀,即:剛剛創(chuàng)建锭环。
1 XMLHttpRequest對(duì)象開始發(fā)送請(qǐng)求泊藕,調(diào)用了open方法,但還沒有調(diào)用send方法玫锋。請(qǐng)求還沒有發(fā)出
2 XMLHttpRequest對(duì)象的請(qǐng)求發(fā)送完成讼呢,send方法已經(jīng)調(diào)用悦屏,數(shù)據(jù)已經(jīng)提交到服務(wù)器,但沒有任何響應(yīng)
3 XMLHttpRequest對(duì)象開始讀取響應(yīng)散劫,還沒有結(jié)束收到了所有的響應(yīng)消息頭幕帆,但正文還沒有完全收到
4 XMLHttpRequest對(duì)象讀取響應(yīng)結(jié)束失乾,一切都收到了
  • status:HTTP的狀態(tài)碼
    • esponseText:獲得響應(yīng)的文本內(nèi)容
    • responseXML:獲得響應(yīng)的XML文檔對(duì)象documednt
    • 就緒狀態(tài)是4而且狀態(tài)碼是200,才可以處理服務(wù)器數(shù)據(jù)
狀態(tài)碼 說明
200 服務(wù)器響應(yīng)正常
400 無法找到請(qǐng)求的資源
403 沒有訪問權(quán)限
404 訪問的資源不存在
500 服務(wù)器內(nèi)部錯(cuò)誤

3.ajax示例

驗(yàn)證用戶名是否存在:

  • jsp頁面
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
    //1.創(chuàng)建XMLHttpRequest對(duì)象
    function getXMLHttpReuest() {
        var xmlhttp;
        if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp = new XMLHttpRequest();
        } else {// code for IE6, IE5
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        return xmlhttp;
    }

    function ckName(){
        //1.獲取用戶名
        var name=document.getElementsByTagName("input")[0].value;
        //2.獲取XMLHttpRequest對(duì)象
        var req = getXMLHttpReuest();
        //5.處理響應(yīng)結(jié)果
        req.onreadystatechange=function(){
            //alert(req.readyState);//查看鏈接狀態(tài)
            if(req.readyState==4){//等于4的時(shí)候代表請(qǐng)求正常
                //alert(req.status);//查看服務(wù)器端相應(yīng)狀態(tài)
                if(req.status==200){//等于200代表服務(wù)器響應(yīng)正常
                    //alert(req.responseText);//得到響應(yīng)結(jié)果
                    var msg = document.getElementById("msg");
                    if(req.responseText=="true"){
                        msg.innerHTML="用戶名已存在";
                    }else{
                        msg.innerHTML="可以使用";
                    }
                }
            }
        }
        //3.建立鏈接,共3個(gè)參數(shù):get或post請(qǐng)求墓贿、請(qǐng)求路徑、默認(rèn)true為異步請(qǐng)求队伟,false為同步請(qǐng)求
        req.open("get","${pageContext.request.contextPath }/regServlet?name="+name);
        //4.發(fā)送請(qǐng)求:get方式值為null
        req.send(null);
    }

 //寫法二:去掉用戶名標(biāo)簽上的onblur事件
    window.onload=function(){
        var nameElement = document.getElementsByName("userName")[0];
        nameElement.onblur = function(){
            var name = this.value;//this等價(jià)于nameElement
            //創(chuàng)建XMLHttpRequest對(duì)象
        var xhr = getXMLHttpRequest();
        //處理結(jié)果
        xhr.onreadystatechange = function(){
            if(xhr.readyState==4){//請(qǐng)求一切正常
                if(xhr.status==200){//服務(wù)器響應(yīng)一切正常
                    //alert(xhr.responseText);//得到響應(yīng)結(jié)果
                    var msg = document.getElementById("msg");
                    if(xhr.responseText=="true"){
                        msg.innerHTML =  "<font color='red'>用戶名已存在</font>";
                        //msg.innerText = "<font color='red'>用戶名已存在</font>";
                    }else{
                        msg.innerHTML = "可以使用";
                    }
                }
            }
        }
        
        //創(chuàng)建連接
        xhr.open("get","${pageContext.request.contextPath }/servlet/ckNameServlet?name="+name.value);
        //發(fā)送請(qǐng)求
        xhr.send(null);
        }           
    }
</script>
</head>
<body>
用戶名:<input type="text" name="userName" onblur="ckName()"/><span id="msg"></span><br/>
密碼:<input type="text" name="pwd"/><br/>
</body>
</html>
  • servlet
package com.rhit.servlet;

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

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

@WebServlet("/regServlet")
public class RegServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out=response.getWriter();
        String name=request.getParameter("name");
        if("tom".equals(name)){
            out.print(true);
        }else{
            out.print(false);
        }
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末啥容,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子击吱,更是在濱河造成了極大的恐慌遥昧,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叫乌,死亡現(xiàn)場(chǎng)離奇詭異憨奸,居然都是意外死亡凿试,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門板甘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盐类,“玉大人呛谜,你說我怎么就攤上這事∶睿” “怎么了聚凹?”我有些...
    開封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)对妄。 經(jīng)常有香客問我沪羔,道長(zhǎng)象浑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮蚪拦,結(jié)果婚禮上驰贷,老公的妹妹穿的比我還像新娘。我一直安慰自己次兆,他們只是感情好锹锰,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著园蝠,像睡著了一般痢士。 火紅的嫁衣襯著肌膚如雪怠蹂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天挚冤,我揣著相機(jī)與錄音训挡,去河邊找鬼。 笑死为肮,一個(gè)胖子當(dāng)著我的面吹牛肤京,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播忘分,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼妒峦,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼肯骇!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起笛丙,我...
    開封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤胚鸯,失蹤者是張志新(化名)和其女友劉穎蠢琳,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體傲须,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡泰讽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年例衍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片已卸。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡佛玄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出累澡,到底是詐尸還是另有隱情梦抢,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布愧哟,位于F島的核電站奥吩,受9級(jí)特大地震影響哼蛆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜霞赫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望端衰。 院中可真熱鬧叠洗,春花似錦、人聲如沸旅东。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽玉锌。三九已至名挥,卻和暖如春疟羹,著一層夾襖步出監(jiān)牢的瞬間主守,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工榄融, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留参淫,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓愧杯,卻偏偏與公主長(zhǎng)得像涎才,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子力九,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容