AJAX

AJAX

AJAX:通過 JS 異步的向服務器發送請求並接受響應數據,響應數據的格式原來是xml,後來變成了JSON

同步請求:

當客戶端向服務器發送請求時,服務器在處理的過程中,瀏覽器只能等待,效率較低

異步請求:

當客戶端向服務器發送請求時,服務器在處理的過程中,瀏覽器可以做其他的操作,不需要一直等待

AJAX的優點:

  1. 異步訪問
  2. 局部刷新

AJAX的使用場景:

  1. 搜索建議
  2. 表單驗證
  3. 前後端完全分離時使用

2.AJAX核心對象 - 異步對象(XMLHttpRequest)

  1. 什麼是XMLHttpRequest

    簡稱爲 xhr,稱爲 “異步對象” 代替瀏覽器向服務器發送異步的請求並接收響應

  2. 創建異步對象

    主流的異步對象是 XMLHttpRequest 類型的.並且所有主流瀏覽器(IE7+,Chrome,Firefox,Safari,Opera)也都支持 XMLHttpRequest.但在IE低版本瀏覽器(IE7以及以下),就不支持XMLHttpRequest,需要使用 ActiveXObject() 來創建異步對象

    如果支持 XMLHttpRequest
    var xhr = new XMLHttpRequest()
    如果不支持 XMLHttpRequest
    var xhr = new ActiveXObject("Microsoft.XMLHTTP")
    
  3. xhr 的成員

     1.方法 - open()
     作用:創建請求
     語法:open(method,url,async)
         method:請求方式,取值 'get' 或 'post'
         url:請求地址,字符串
         async:是否採用異步的方式發送請求
         true:異步請求
         false:同步請求
         ex:
         xhr.open('get','/server',true);
         
    2.屬性 - readyState
    作用:請求狀態,通過不同的請求狀態值來表示xhr與服務器的交互情況
    由 0-4 共 5 個值表示5個不同的狀態
        0 : 請求尚未初始化
        1 : xhr已經與服務器建立連接
        2 : 服務器端已經接收請求
        3 : 請求正在處理中
        4 : 響應已經完成
         
    3.屬性 - status
    作用:服務器端的響應狀態碼
        200 : 表示服務器已經正確處理請求並給出響應
        404 : 請求資源不存在
        500 : 服務器內部錯誤
        
    4.屬性 - responseText
    作用 : 接收服務器端響應回來的數據
    
    5.事件 - onreadystatechange
    作用 : 每當 xhr 的 readyState 值發生改變的時候都要觸發的行爲操作 - 回調函數
    關注:
        1.xhr 的 readyState 是否爲 4
        2.xhr 的 status 是否爲 200
        如果以上兩點同時滿足的話,則可以接收響應數據(responseText)
        ex:
        xhr.onreadystatechange = function(){
        	if(xhr.readyState==4&&xhr.status==200){
        		console.log(xhr.responseText);
        	}
        }	
        
    6.方法 - send()
    作用:通知 xhr 開始向服務器發送請求
    語法:xhr.send(body)
        get : body的值爲 null
        xhr.send(null)
        post: body的值爲具體請求提交的數據
        xhr.send("請求數據")
    

4.AJAX的操作步驟

  1. GET請求
    1. 創建 xhr 對象
    2. 創建請求 - open()
    3. 設置回調函數 - onreadystatechange # 判斷狀態,接收響應,業務處理
    4. 發送請求 - send(null)
  2. POST請求
    1. 創建 xhr 對象
    2. 創建請求 - open()
    3. 設置回調函數 - onreadystatechange # 判斷狀態,接收響應,業務處理
    4. 發送請求 - send(具體數據)

5.原生的AJAX

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <script>
        function createXhr(){
            var xhr = null;
            if(window.XMLHttpRequest){
                xhr = new XMLHttpRequest();
            }else{
                xhr = new ActiveXObject("Microsoft.XMLHTTP");
            }
            return xhr;
        }

        function btnAjax(){
            //1.創建xhr
            var xhr = createXhr();
            //2.創建請求
            //xhr.open('get','/server',true);
            xhr.open('get','/server?uname=wangwc',true);
            //3.設置回調函數
            xhr.onreadystatechange=function(){
                //判斷xhr的狀態以及服務器的狀態
                if(xhr.readyState==4&&xhr.status==200){	
                	document.getElementById('show').innerHTML=xhr.responseText   							   									      		      
                }
            }
            //4.發送請求
            xhr.send(null);
        }
    </script>

    <!--<button οnclick="console.log(createXhr())">測試異步對象</button>-->

    <div id="show"></div>
    <button onclick="btnAjax()">AJAX請求</button>
</body>
</html>

js 遍歷json對象

packJson = [
 
{"name":"nikita", "password":"1111"},
 
{"name":"tony", "password":"2222"}
 
];


for(var p in packJson){//遍歷json數組時,這麼寫p爲索引,0,1
 
  	alert(packJson[p].name + " " + packJson[p].password);
 
}

for(var i = 0; i < packJson.length; i++){
 
  	alert(packJson[i].name + " " + packJson[i].password);
 
}

jqury 遍歷json對象

$arr.each(function(i,obj){
    i : 遍歷出來的元素的下標
    obj : 遍歷出來的元素
});

$.each(arr,function(i,obj){
	i : 遍歷出來的元素的下標
    obj : 遍歷出來的元素
});

6.使用 jquery 操作 AJAX

1. $obj.load(url[,data][,callback])
作用:遠程加載數據並加載到$obj元素中
url : 遠程請求的地址
data : 要傳遞的參數
    1.字符串拼參數,採用 get 方式發送請求
    2.使用 JSON 格式拼參數,採用 post 方式發送請求
callback : 請求和響應完成之後的回調函數
    function(resText,statusText){
        resText : 響應回來的文本
        statusText : 響應回來的狀態文本
    }

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/jquery-1.11.3.js"></script>
    <script>
        $(function(){
            $("#btnLoad").click(function(){
                var params = {
                    "uname":"wangwc",
                    "uage":30
                }
                $("#show").load('/02-jq-load',params,function(resText,statusText){
                    console.log("響應回來的文本是:"+resText);
                    console.log("狀態文本是:"+statusText);
                    $(this).html("<h1>"+resText+"</h1>");
                });
            });
        });
    </script>
</head>
<body>
    <button id="btnLoad">使用load方法加載數據</button>
    <div id="show"></div>
</body>
</html>
2.$.get(url[,data][,callback][,type])
作用:使用 get 方式異步的向服務器發送請求
url : 遠程請求的地址
data : 請求參數 (可選)
callback : 響應成功後的回調函數(可選)
    function(resText){
    	resText : 表示響應回來的數據
    }

type : 響應回來的數據的數據類型
    1.html : 響應回來的文本當成HTML文本處理
    2.text : 響應回來的文本當成text文本處理
    3.json : 響應回來的文本當成JSON進行處理(轉換成JS對象)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/jquery-1.11.3.js"></script>
    <script>
        $(function(){
            $("#btnGet").click(function(){
                $.get('/03-jq-get',function(resText){
                    //resText表示的是響應回來的數據
                    console.log(typeof(resText));
                    console.log(resText);
                    console.log(resText.uname);
                    console.log(resText.uage);
                },'json');
            });
        });
    </script>
</head>
<body>
    <button id="btnGet">使用get方式發送請求</button>
</body>
</html>
$.post(url[,data][,callback][,type])
url : 遠程請求的地址
data : 請求參數 (可選)
callback : 響應成功後的回調函數(可選)
    function(resText){
    	resText : 表示響應回來的數據
    }

type : 響應回來的數據的數據類型
    1.html : 響應回來的文本當成HTML文本處理
    2.text : 響應回來的文本當成text文本處理
    3.json : 響應回來的文本當成JSON進行處理(轉換成JS對象)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/jquery-1.11.3.js"></script>
    <script>
        $(function(){
            $("#btnPost").click(function(){
                var params = {
                    'uname':'wangwc',
                    'ugender':'男'
                }
                $.post('/04-jq-post',params,function(data){
                    $("#show").html(data);
                });
            });
        });
    </script>
</head>
<body>
    <button id="btnPost">發送post請求</button>
    <div id="show"></div>
</body>
</html>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章