Ajax學習第七天

Ajax學習第七天

Ajax學習第七天——CORS跨域資源共享及jQuery中$.ajax()的使用
第二種解決非同源數據的方案
CORS:Corss orgin resource sharing 即跨域資源共享,它允許瀏覽器向跨域服務器發送Ajax請求,克服了Ajax只能同源使用的限制。
具體使用:需要在服務器端進行配置,客戶端無需配置
服務器端代碼如下:

app.get('/cross',(req,res) => {
	// 1.允許哪些客戶端訪問我
	// * 代表所有的客戶端訪問我
	res.header('Access-Control-Allow-Origin','*');
	// 2.允許客戶端使用哪些方法訪問我
	res.header('Access-Control-Allow-Method','get,post');
});

第三種解決非同源數據的方案
同源政策是瀏覽器給予Ajax技術的限制,服務器端是不存在同源政策限制的,因此我們可以先將客戶端的請求發送給自己的服務器端,由自己的服務器端與非同源的服務器端進行訪問,拿到數據後,再將數據返回給自己的客戶端,相當於在自己的客戶端與非同源服務器端之間增加了一座橋樑,就是自己的服務器端。
本方法的提出要先了解Cookie的作用,最初的時候,客戶端與服務器端使用HTTP協議進行連接,它們之間的連接是無狀態的,即沒有記錄功能,相當於兩端都互不認識,Cookie提出後,相當於一張它們的名片,使得客戶端與服務器端彼此認識,這時他們彼此就可以互相訪問了。
withCredentials屬性
在使用Ajax技術發送跨域請求時,默認情況下不會再請求種攜帶Cookie信息,所以它們彼此的訪問是不被允許的。此時,只需修改本屬性的值爲true即可,需要在客戶端與服務器端都進行配置。
服務器端代碼添加以下一行:
// 允許客戶端發送跨域請求時攜帶Cookie信息
res.header('Access-Control-Allow-Credentials',true);
客戶端代碼添加以下一行:
// 當發送跨域請求時攜帶Cookie信息 默認值爲false
xhr.withCredentials = true;


jQuery中 $.ajax() 的使用

jQuery中將Ajax已經封裝好了,使用即可,其中有幾個屬性注意一下使用方式即可

  1. ContentType: 表示發送數據的類型,默認爲 application/x-www-form-urlencoded

  2. data: 表示傳入的數據,可以傳對象,也可以傳字符串,最終它都會把它轉換爲字符串處理

  3. beforeSend:function(){} 表示在請求發送之前會調用此函數,可以放入等待緩衝的圖片,提高用戶體驗

  4. dataType:‘jsonp’ jQuery中的$.ajax()方法還可以發送jsonp請求,這點是比較方便的,有兩個可選參數:

    1. josnp:'cb'表示修改callback參數的名稱 即向服務器端傳遞函數名字的參數名稱
    2. jsonpCallback:'fnName' 表示指定函數名稱,此函數就代替了success那個參數的作用

serialize方法
在使用$.ajax()方法中,如果表單中的元素有很多,我們也需要自己拼接參數的格式,本方法與之前的FormData函數類似,不過FromData存在與HTML5中,有兼容性問題,所以在jQuery中,有此方法來替代
作用:將表單中的數據自動拼接成字符串類型的參數,有且只有這項功能
很多時候我們需要使用到字符串裏某一些的值,這時我們將它轉換爲對象類型就很方便,但是jQuery中並沒有相關的方法,所以這裏我們把它封裝好了,代碼及使用場景如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <form id="form">
        <input type="text" name="username">
        <input type="password" name="psw">
        <input type="submit" value="提交">
    </form>
    <script src="./jquery-3.4.1.min.js"></script>
    <script>
        $('#form').on('submit',function(){
            // var result = $('#form').serialize();
            // serializeObject(result);
            serializeObject($(this));
            return false;
        })
        // 將表單中用戶輸入的內容轉換爲對象類型
        function serializeObject(obj){
            // 處理結果對象 
            var Object = {};
            // 將結果拼接成數組類型
            var result = obj.serializeArray();
            // 循環數組 將數組轉換爲對象類型
            $.each(result,function(index,value){
                Object[value.name] = value.value;
            })
            // 將處理的結果返回到函數外部
            return Object;
        }
    </script>
</body>
</html>

全局事件

只要頁面中有Ajax請求被髮送,對應的全局事件就會被觸發

  • .ajaxStart() //當請求開始發送時觸發
  • .ajaxComplete() //當請求完成時觸發
    注意 以上兩個事件均需要綁定在 document 上
$(document).on('ajaxStart',function(){

})

以上兩個全局事件可以結合NProgrss進度條插件(在頁面的最上端有一個進度條可可以展示當前請求狀態),提升用戶體驗。


RESTful風格的API
概述:它是一套關於設計請求的規範

  • GET:獲取
  • POST:添加
  • PUT:更新
  • DELETE:刪除

例如:

  • GET: www.example.com/users 獲取用戶列表數據
  • POST: www.example.com/users 創建(添加)用戶數據
  • PUT:www.example.com/users/1 修改用戶ID爲1的用戶信息
  • DELETE:www.example.com/users/1 刪除用戶ID爲1的用戶信息

PUT和DELETE在傳統表單中不支持,只有Ajax中支持,具體的要結合相關案例


XML基礎
XML:extensible markup language 可擴展標記語言,作用是傳輸和存儲數據
XML DOM:即XML文檔對象模型,是W3C組織定義地一套操作XML文檔對象的API,瀏覽器會將XML文檔解析成文檔對象模型
注:此類型的返回數據已經很少用了,瞭解即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章