站長資訊網
        最全最豐富的資訊網站

        認識 ajax

        認識 ajax

        相關文章推薦:ajax視頻教程

        1.1 什么是ajax:

        • Ajax即“Asynchronous Javascript And XML”(異步JavaScript 和XML),是指一種創建交互式網頁應用的網頁開發技術。Ajax=異步JavaScript和XML(標準通用標記語言的子集)。通過在后臺與服務器進行少量數據交換,Ajax可以使用網頁實現異步更新。這意味著可以在不重新加載整個網頁的情況下,對網頁的某部分進行更新(無刷新技術)。傳統的網頁(不使用Ajax)如果需要更新內容,必須重載整個網頁頁面。

        1.2Ajax的應用場景

        1.2.1 檢查用戶名是否已被注冊:

        很多站點的注冊頁面都具被自動檢測用戶名是否存在的友好提示,該功能整體頁面并沒有刷新,但仍然可以異步與服務器進行數據交換,查詢用戶輸入的用戶名是否存在數據庫。

        認識 ajax

        1.2.2 省市級聯下拉框聯動:

        很多站點都存在輸入用戶地址的操作,在完成地址輸入時,用戶所在的省份是下拉框,當選擇不同的省份時會出現不同市區的選擇,這就是最常見的省市聯動效果。

        認識 ajax

        1.2.3 內容自動補全:

        不管時專注于搜索的百度,還是站點內商品搜索的淘寶,都有搜索的功能,在i搜索框輸入查詢關鍵字時,整個頁面沒有刷新,但會根據關鍵字顯示相關查詢字條,這個過程是異步的。

        百度的搜索補全功能:

        認識 ajax

        淘寶的搜索補全功能:

        認識 ajax

        1.3 同步方式與異步方式的區別

        1. 同步方式發送請求:發送一個請求,需要等待響應返回,然后才能夠發送下一個請求,如果該請求沒有響應,不能發送下一個請求,客戶端會一直處于等待過程中。
        2. 異步方式發送請求:發送一個請求,不需要等待響應返回,隨時可以再發送下一個請求,即不需要等待。

        認識 ajax

        1.4 Ajax的原理分析

        認識 ajax

        • AJAX引擎會在不刷新瀏覽器地址欄的情況下,發送異步請求
        1. 使用JavaScript獲取瀏覽器內置的AJAX引擎(XMLHttpRequest對象)
        2. 使用js確定請求路徑和請求參數
        3. AJAX引擎對象根據請求路徑和請求參數進行發送請求
        • 服務器接收到Ajax引擎的請求進行處理
        1. 服務器獲得請求參數數據
        2. 服務器處理請求業務(調用業務層代碼)
        3. 服務器響應數據給Ajax引擎
        • Ajax引擎獲得服務器響應的數據,通過執行JavaScript的回調函數將數據更新到瀏覽器頁面的具體位置
        1. 通過設置給Ajax引擎的回調函數獲取服務器響應的數據
        2. 使用JavaScript在指定的位置,顯示響應的數據,從而局部修改頁面的數據,達到局部刷新的目的。

        2.1js原生的Ajax

        • js原生的Ajax開發步驟:
        1. 創建Ajax引擎對象

        2. Ajax引擎對象綁定監聽(監聽服務器已將數據響應給引擎)

        3. 綁定提交地址

        4. 發送請求

        5. 監聽里面處理響應數據

        <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <title>Title</title>     <style type="text/css"></style>     <script type="text/javascript" src="js/jquery-3.3.1.min.js"></script>     <script type="text/javascript">         //同步請求點擊事件         function sendRequest() {             //js刷地址欄請求服務器端             location.href = "Ajax1Servlet?name=admin&password=123abc";         }                  //異步請求點擊事件         function sendAsynRequest() {             //1.創建ajax引擎對象             var xmlHttp = new XMLHttpRequest();             //2.設置回調函數,目的是處理服務器完全返回的數據             xmlHttp.onreadystatechange = function () {                 /**                  * 這個回調函數什么調用呢?是ajax引擎對象與服務器通信狀態碼改變的時候調用                  * ajax引擎對象與服務器通信狀態碼xmlHttp.readystate,范圍0~4                  * 0:請求未初始化                  * 1:服務器連接已建立                  * 2:請求已接收                  * 3:請求處理中                  * 4:請求已完成,且響應已就緒                  * 這個回調函數一共被調用4次,但只有狀態碼4的時候才代表服務器響應完成數據完成。                  * ajax引擎通信轉態碼為4和http通信轉態碼為200                  */                 if(xmlHttp.readyState==4 && xmlHttp.status==200){                     //獲取響應數據                     var content = xmlHttp.responseText;                     alert(content);                 }             }             //3.設置請求路徑和請求參數             /**              * xmlHttp.open(method,url)              * method,請求方法,get或post請求              * url:請求路徑              */             xmlHttp.open("get","Ajax1Servlet?name=admin&psw=abc123");             //4.發送請求             xmlHttp.send();         }     </script> </head> <body> <input type="button" value="發送同步請求" onclick="sendRequest();"/> <input type="button" value="發送異步請求" onclick="sendAsynRequest();"/> </body> </html>
        package com.sunny.web;  import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;  @WebServlet(name = "Ajax1Servlet", urlPatterns = "/Ajax1Servlet") public class Ajax1Servlet 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 {         //獲取請求參數         String name = request.getParameter("name");         String password = request.getParameter("password");         //打印出來         System.out.println("name="+name);         System.out.println("password="+password);         //輸出數據前端         response.getWriter().write("hello js ajax");     } }

        2.2 Ajax引擎連接狀態readyState值0~4變化過程

        認識 ajax

        • 存有 XMLHttpRequest 的狀態。從 0 到 4 發生變化。
        • 0: 請求未初始化
        • 1: 服務器連接已建立
        • 2: 請求已接收
        • 3: 請求處理中
        • 4: 請求已完成,且響應已就緒

        這里狀態值4只能說明接收到了服務器的響應服務器處理ajax請求結束,但是不能代表正確的獲取了服務器的響應,需要配合http狀態碼200兩個條件就可以說明正確的獲取了服務器響應。只有這兩個條件滿足,xmlhttp.responseText才可以獲取到正確的響應數據。

        xmlhttp.onreadystatechange = function(){ 			if(xmlhttp.readyState == 4){ 				if(xmlhttp.status == 200){ 					alert("響應數據" + xmlhttp.responseText); 				} 			} 		};

        相關學習推薦:javascript學習教程

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 久久青青草原精品国产软件 | 久久精品国产99国产精偷| 亚洲人成电影网站国产精品| 久久精品国产亚洲AV无码麻豆| 欧美日韩精品乱国产538| 精品国产VA久久久久久久冰| 欧美精品黑人粗大欧| 国产精品久久久99| 日本精品不卡视频| www.99精品| 久久夜色精品国产噜噜麻豆 | 99精品视频在线观看| 亚洲精品无码高潮喷水在线| 久久久久久亚洲精品不卡| 国产亚洲色婷婷久久99精品91| 56prom精品视频在放免费| 国产精品亚洲专区在线观看 | 亚洲国产精品无码久久久不卡 | 精品久久久无码中文字幕| 91精品免费久久久久久久久| 中文字幕精品视频| 亚洲愉拍自拍欧美精品| 日本精品久久久久中文字幕8| 91精品国产高清久久久久久io| 精品一区二区三区自拍图片区| 欧美肥屁VIDEOSSEX精品| 久久久久人妻一区精品性色av| 人妻少妇精品视中文字幕国语 | 97久久精品无码一区二区 | 亚洲国产精品婷婷久久| 久久精品国产99国产精品澳门| 亚洲精品欧美综合| 91亚洲精品自在在线观看| 国产精品99| 精品国产不卡一区二区三区| 国产在线91精品入口| 精品国产成人在线| 偷拍精品视频一区二区三区| 亚洲国产高清精品线久久| 亚洲国产精品无码久久SM| 国产精品一区二区久久国产|