AJAX

Ajax

AJAX:即“Asynchronous Javascript And XML”(異步的JavaScript和XML)是钥,是指一種創(chuàng)建交互式網(wǎng)頁應用的網(wǎng)頁開發(fā)技術,尤其是在一種在無需重新加載整個網(wǎng)頁的情況下衍慎,能夠更新部分網(wǎng)頁的技術甥角。

傳統(tǒng)Web開發(fā)

World Wide Web(簡稱Web):是隨著Internet的普及使用而發(fā)展起來的一門技術垦搬,其開發(fā)模式是一種請求→刷新→響應的模式呼寸,每個請求由單獨的一個頁面來顯示,發(fā)送一個請求就會重新獲取這個頁面猴贰。


image.png

Ajax采用異步通信对雪,主要以數(shù)據(jù)交互為主;傳統(tǒng)的web開發(fā)采用同步通信米绕,主要以頁面交互為主瑟捣。

ajax請求步驟

1.創(chuàng)建Ajax對象

var request = new XMLHttpRequest();

2.連接服務器
open(method,url,async);

request.open("get","query.do",true);//異步請求

3.發(fā)送請求
send(string)
在使用GET方式請求時無需填寫參數(shù)
在使用POST方式時參數(shù)代表著向服務器發(fā)送的數(shù)據(jù)

        xhr.open('get','random.do?max=100‘,true);
        xhr.send();

//        xhr.open('post','random.do',true);
//        xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");//post請求需要設置HTTP頭信息,否則發(fā)送數(shù)據(jù)有問題
//        xhr.send('max=100');

4.接收服務器相應數(shù)據(jù)

 xhr.onload = function () {
          console.log(xhr.responseText);
        }

一個綜合實例

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title></title>
    <script>
      function getRandom() {
        var max = document.getElementById('max');

        var xhr = new XMLHttpRequest();

        xhr.open('get','random.do?max='+ max.value,true);
        xhr.send();

//        xhr.open('post','random.do',true);
//        xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
//        xhr.send('max='+ max.value);
        xhr.onload = function () {
          var div = document.getElementById('num');
          div.innerHTML = xhr.responseText;
        }
      }

    </script>
  </head>
  <body>
  多少以內的隨機數(shù):<input type="text" id="max">
  <button onclick="getRandom();">得到一個隨機數(shù)</button>
  <div id="num">

  </div>

  </body>
</html>
@WebServlet(name = "RandomServlet",urlPatterns = "/random.do")
public class RandomServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        int max = Integer.parseInt(request.getParameter("max"));
        Random random = new Random();
        int num = random.nextInt(max);
        response.getWriter().println(num);
    }
}

可以寫一個傳統(tǒng)web開發(fā)方式的請求回應,進行對比义郑。

ajax校驗用戶名是否已存在

image.png
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <title>$Title$</title>
  <script>
    function checkUser() {
      //創(chuàng)建一個XMLHttpRequest類型的對象ajaxReq
      var ajaxReq = new XMLHttpRequest();
      var username = document.getElementById('username');

      //用ajaxReq打開一個連接
      ajaxReq.open("post","valid.do",true);

      ajaxReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      //發(fā)送請求給服務器
      ajaxReq.send("username="+username.value);
      //設置一個回調函數(shù)蝶柿,用來處理服務器的回應。
      ajaxReq.onload = function () {
            var msg = document.getElementById('msg');
            if(ajaxReq.responseText=="0")//可以注冊非驮,用戶名還不存在
            {
              msg.innerHTML="可以注冊";
            }
            else
            {
              msg.innerHTML="用戶名已存在";
            }
      }
    }
  </script>
</head>
<body>
用戶注冊
<form method="post" action="valid.do">
  用戶名:<input type="text" id = "username" name="username" onblur="checkUser();">
  <span id="msg"></span>
  密碼:<input type="text" name="pwd">
  <input type="submit">
</form>
</body>
</html>

ValidUserServlet.java

@WebServlet(name = "ValidUserServlet",urlPatterns = "/valid.do")
public class ValidUserServlet extends HttpServlet {
    private List<String> lst = new ArrayList<String>();
    public void init() throws javax.servlet.ServletException
    { /* compiled code */
        lst.add("zhangsan");
        lst.add("lisi");
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String strName = request.getParameter("username");
        //contains---包含
        PrintWriter pw = response.getWriter();
        if(lst.contains(strName))//用戶已存在
        {
            pw.print("1");
        }
        else
        {
            pw.print("0");
        }
    }

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

    }
}

python版

<html>
<head>
  <title>$Title$</title>
  <script>
    function checkUser() {
      //創(chuàng)建一個XMLHttpRequest類型的對象ajaxReq
      var ajaxReq = new XMLHttpRequest();
      var username = document.getElementById('username');

      //用ajaxReq打開一個連接
      ajaxReq.open("post","hello",true);

      ajaxReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      //發(fā)送請求給服務器
      ajaxReq.send("username="+username.value);
      //設置一個回調函數(shù)交汤,用來處理服務器的回應。
      ajaxReq.onload = function () {
            var msg = document.getElementById('msg');
            var json = JSON.parse(ajaxReq.responseText)
            if(json.res=="1")//可以注冊劫笙,用戶名還不存在
            {
              msg.innerHTML="可以注冊";
            }
            else
            {
              msg.innerHTML="用戶名已存在";
            }
      }
    }
  </script>
</head>
<body>
用戶注冊
<form method="post" action="valid.do">
  用戶名:<input type="text" id = "username" name="username" onblur="checkUser();">
  <span id="msg"></span>
  密碼:<input type="text" name="pwd">
  <input type="submit">
</form>
</body>
</html>
from flask import Flask, jsonify, render_template, request

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/hello',methods=['get','post'])
def hello():
    username = ['zhangsan', 'lisi']
    name = request.form.get('username')
    info = {'res': 1}
    if name in username:
        info['res'] = 0

    return jsonify(info)

if __name__ == '__main__':
    app.run(debug=True)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末芙扎,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子填大,更是在濱河造成了極大的恐慌戒洼,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件允华,死亡現(xiàn)場離奇詭異圈浇,居然都是意外死亡寥掐,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門磷蜀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來召耘,“玉大人,你說我怎么就攤上這事褐隆∥鬯” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵庶弃,是天一觀的道長衫贬。 經(jīng)常有香客問我,道長歇攻,這世上最難降的妖魔是什么固惯? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮掉伏,結果婚禮上缝呕,老公的妹妹穿的比我還像新娘。我一直安慰自己斧散,他們只是感情好,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布摊聋。 她就那樣靜靜地躺著鸡捐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪麻裁。 梳的紋絲不亂的頭發(fā)上箍镜,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機與錄音煎源,去河邊找鬼色迂。 笑死,一個胖子當著我的面吹牛手销,可吹牛的內容都是我干的歇僧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼锋拖,長吁一口氣:“原來是場噩夢啊……” “哼诈悍!你這毒婦竟也來了?” 一聲冷哼從身側響起兽埃,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤侥钳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后柄错,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舷夺,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡苦酱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了给猾。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片躏啰。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖耙册,靈堂內的尸體忽然破棺而出给僵,到底是詐尸還是另有隱情,我是刑警寧澤详拙,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布帝际,位于F島的核電站,受9級特大地震影響饶辙,放射性物質發(fā)生泄漏蹲诀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一弃揽、第九天 我趴在偏房一處隱蔽的房頂上張望脯爪。 院中可真熱鬧,春花似錦矿微、人聲如沸痕慢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽掖举。三九已至,卻和暖如春娜庇,著一層夾襖步出監(jiān)牢的瞬間塔次,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工名秀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留励负,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓匕得,卻偏偏與公主長得像继榆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子耗跛,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內容