Ajax — 第六天

Ajax-06

GET和POST的區別

  • 字面意思不同
    • GET 是獲取意思。想從服務器獲取數據,用GET方式的請求
    • POST是郵遞、郵寄意思。如果提交數據到服務器,用POST方式
  • 請求參數位置不同
    • GET 請求參數會和url拼接到一起,形如 api/getbooks?id=2&age=3
    • POST 的請求參數,也叫做提交的數據,它不會和url拼接到一起
  • 瀏覽器工具查看請求參數的位置不一樣
    • GET請求,會在url上查看到請求參數;在Headers/Query String Parameters也可以查看。
    • POST方式,只能在Headers/Form Data位置查看提交的數據
  • 攜帶的數據量大小不一樣
    • GET方式能夠攜帶少量的數據,一般瀏覽器允許的url的長度是2k
    • POST方式能夠攜帶的數據量大小沒有限制。
  • 上傳文件
    • 上傳文件只能使用POST方式。
  • 本質的區別
    • GET方式不會對服務器的數據做出改變
    • POST方式非常可能對服務器的數據做出改變

如果后端同學提供的接口沒有使用正確的請求方式,我們前端也沒有辦法。

同步和異步

Ajax 即“Asynchronous Javascript And XML”(異步 JavaScript 和 XML)。

和異步相對的是同步。

說起JS中的同步和異步,需先了解 JS 的單線程。

JS單線程

JS的單線程,指的是執行代碼的時候,只能從前向后(從上到下),一個一個任務去執行。前面的任務沒有執行完,后面的任務只能等待。

// 寫一個函數,函數的執行需要大量的時間
// 1 1 2 3 5 8 13 21 ....  斐波那契數列
// 要求給出一個位置,計算得出該位置的數字是什么?
function fn (n) {if (n === 1 || n == 2) {return 1;}return fn(n-1) + fn(n-2);
}console.log(111);
console.log(  fn(43)  );
console.log(222);
console.log(222);
console.log(222);
console.log(222);
console.log(222);

同步

同步,即同步任務,指的就是JS代碼需從上到下依次執行,前面的代碼如果沒有執行完畢,后面代碼的執行只能等待。

特點:阻塞后續代碼的執行

異步

異步,即異步任務。異步任務的執行比較復雜。比如一段代碼,包含同步和異步任務,具體來說

  1. 優先執行同步任務
  2. 遇到異步任務,會把異步任務放到隊列中,簡單的理解就是排隊等待
  3. 同步任務執行完畢,會按順序執行隊列中的異步任務
  4. 多個異步任務之間,可以同時執行。
  5. 哪一個異步任務先結束,則優先處理該異步任務的結果。

[
在這里插入圖片描述

JS中的異步任務列舉

  • 定時器
  • 事件
  • Ajax請求
  • 異步讀寫文件(Node中的知識點)
  • 查詢MySQL數據庫(Node中的知識點)

初次之外都是同步代碼

Ajax中的異步

Asynchronous – 異步。

console.log(111);let xhr = new XMLHttpRequest();
xhr.onload = function () {console.log(333);
};
// xhr.responseType = 'json'; // 同步請求不能設置responseType
// open(請求方式, url, true)
// 第三個可選參數,默認 true,表示ajax請求是異步請求
// 如果希望發送一個同步的ajax請求,第三個參數設置為false
xhr.open('GET', 'http://www.liulongbin.top:3006/api/getbooks', false);
xhr.send();console.log(222);

雖然可以通過open方法的第三個參數,來設置ajax為同步任務,但是強烈不建議這么做

jQuery中,能不能設置ajax的同步或異步:

$.ajax({type: 'GET',url: 'xxx',async: true, // 默認true表示異步。如果設置為false,則表示同步
});

小練習:體會一下異步任務的執行:

console.log(111);// 異步ajax請求,請求書籍數據 ---------------------------------
let xhr = new XMLHttpRequest();
xhr.onload = function () {console.log(333);
};
xhr.open('GET', 'http://www.liulongbin.top:3006/api/getbooks');
xhr.send();// 再次發生一個ajax請求 ------------------------------------
let xhr2 = new XMLHttpRequest();
xhr2.onload = function () {console.log(444);
};
xhr2.open('GET', 'http://www.liulongbin.top:3006/api/delbook?id=1');
xhr2.send();console.log(222);

HTTP協議(了解)

HTTP協議簡介

  • 什么是http協議
    • 超文本傳輸協議
  • http協議規定了什么
    • 規定了客戶端和服務器交互數據的時候,數據要遵守的格式。

http請求消息/請求報文

請求報文,指的是客戶端提交給服務器的全部數據。

  • 請求行
    • 請求方式
    • 請求url地址
    • 協議及版本
  • 請求頭
    • 鍵:值 的形式,一次請求,可能會有很多請求頭
    • Content-Type: ‘application/x-www-form-urlencoded’ / ‘multipart/form-data; xxx’
      • 提交的數據的一種編碼格式(查詢字符串格式 / FormData格式)
    • User-Agent: ‘’
      • 體現了當前客戶端是什么瀏覽器、版本是什么版本
  • 請求體
    • xhr.send(請求體); 客戶端提交的數據就是請求體
      • GET方式沒有請求體
      • POST方式 才有請求體

http響應消息/響應報文

  • 響應行

    • 協議及版本
    • http狀態碼 (比如, 200)
    • http狀態描述信息 (比如, OK)
  • 響應頭

    • Access-Control-Allow-Origin: ‘*’

      • CORS跨域資源共享,服務器設置的響應頭,允許ajax跨域
    • Content-Type: ‘application/json; charset=utf-8’

      • 服務器告訴客戶端,返回的數據是什么格式的,編碼是什么編碼

        $.get(url, data, callback, dataType);
        - dataType 表示預期服務器返回的類型jQuery如何知道服務器返回的數據類型呢?是根據響應頭中的Content-Type判斷,如果判斷服務器返回的是json格式,所以jQuery內部就會自動調用JSON.parse()JSON格式的數據轉成JS數組或對象$.get(url, data, function (res) {如果響應頭沒有沒有Content-Type,則res 就是字符串手動指定最后一個dataType為json之后,res就是JS對象
        });
        
  • 響應體

    • 服務器返回的主體內容。
    • 就是我們之前所說的,服務器返回的數據。

http響應狀態碼

  • 200(OK)表示請求成功
  • 201(Created)請求成功,一般用于添加資源成功
  • 304 (Not Modified)表示請求的資源沒有修改(第一次請求)
  • 400(Bad Request)語法有誤(一般來說,請求參數寫錯了或者請求頭寫錯了)
  • 403(Forbidden)訪問成功了,但是服務器告訴你沒有權限訪問
  • 404(Not Found)請求的資源,在服務器上不存在,找不到。
  • 500()服務器內部錯誤

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/248044.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/248044.shtml
英文地址,請注明出處:http://en.pswp.cn/news/248044.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

iOS Tips 模擬器屏幕截圖

當我們發布app到AppStore的時候,在itunes connect里面,蘋果官方要求我們提供各種尺寸的屏幕截圖。由于受到硬件條件的限制,我們不可能在每個真實的物理機器上測試并截圖,相反如果我們能直接在模擬器上進行屏幕截圖的話&#xff0c…

數據庫系統原理(第6章:數據庫安全與保護)

一、數據庫完整性 數據庫完整性是指數據庫中數據的正確性和相容性。 完整性約束條件的作用對象 列級約束: 包括對列的類型、取值范圍、精度等的約束元組約束: 指元組中各個字段之間的相互約束表級約束: 指若干元組、關系之間的聯系的約束定義…

.net core WebApi 使用Swagger生成API文檔

關于 Swagger Swagger能成為最受歡迎的REST APIs文檔生成工具之一,有以下幾個原因: Swagger 可以生成一個具有互動性的API控制臺,開發者可以用來快速學習和嘗試API。Swagger 可以生成客戶端SDK代碼用于各種不同的平臺上的實現。Swagger 文件可…

Git — 初體驗

準備工作 版本管理軟件 作用 記錄代碼的版本實現多人協作 分類 集中式,典型代表 SVN分布式,典型代表 Git 注冊遠程倉庫賬號 遠程倉庫相當于中央服務器我們需要在github上或碼云上注冊一個賬號,用于創建遠程倉庫使用注冊的時候&#xff0…

iOS CoreTelephony框架介紹與使用案列

昨晚看一篇文章時看到了私有API這個詞,貌似開發者對私有API的使用很反感于是果斷百度谷歌,以下是Stackoverflow中關于Private Frameworks的一個解釋: Private frameworks are frameworks which you are not allowed to use. They are not exp…

JS數組的迭代器方法

迭代器forEachevery一、迭代器方法 迭代器方法, 這些方法對數組中的每一個元素應用一個函數,可以返回一個值,一組值或一個新數組。 不生成新數組的迭代器方法 1.forEach() forEach()輸出 forEach輸出結果2.every() 該方法按接受一個返回值為布…

Git 筆記

三個區域 下面三個區域,是Git虛擬的區域,看不到,摸不著。 工作區 工作區,指的是使用Git管理后的文件,這些文件顯示在磁盤上,供我們使用或修改的區域。所以,粗略的說,項目文件夾就是…

C# webapi 上傳下載圖片

客戶端上傳文件 string url url "webUploadFile";Uri server new Uri(url);HttpClient httpClient new HttpClient();MultipartFormDataContent multipartFormDataContent new MultipartFormDataContent();StreamContent streamConent new StreamContent(new F…

OC-@dynamic 關鍵字

dynamic這個關鍵詞,通常是用不到的。 它與synthesize的區別在于: 使用synthesize編譯器會確實的產生getter和setter方法,而dynamic僅僅是告訴編譯器這兩個方法在運行期會有的,無需產生警告。 假設有這么個場景,B類&…

git -- 練習的筆記

gitgitee.com:my_exercises/my_exercises.githttps://gitee.com/my_exercises/my_exercises/invite_link?invite3ab56c724a0aed34ae2bd193ce87e741e67fe05ee029cc01b7993663152babc57d76203fdafbbb42e766b0d826817bc91.在任意位置右鍵打開 2.初始化設置 3.添加遠程倉庫地址 4.…

Swift傻傻分不清楚系列(十二) 屬性

本頁包含內容: 存儲屬性(Stored Properties)計算屬性(Computed Properties)屬性觀察器(Property Observers)全局變量和局部變量(Global and Local Variables)類型屬性&a…

GIT — 使用回顧

回顧Git的使用 記錄每次的變更 工作區 --> 暫存區 git add . / git add 文件 文件夾 .... 工作區 --> 暫存區/本地倉庫 前提條件:文件曾經被添加到暫存區或提交到倉庫git commit -a -m 提交說明 暫存區 --> 本地倉庫 git commit -m 提交說明 / git commi…

獲取兩個數百分比的值

1 /**2 * 獲取兩個數百分比的值3 * 4 * param num1 5 * param num26 * param retain 保留小數位數7 * return8 */9 public static String numberFormat(int num1, int num2, int retain) { 10 NumberFormat numberFormat …

iOS AVAudioPlayer和AVAudioPlayerDelegate-音頻播放處理中斷

學習總是在進行。 一、AVAudioPlayer如何處理中斷 AVAudioPlayer類提供了代理方法&#xff0c;用來處理當播放音頻文件時&#xff0c;發生來電、鬧鐘等事件。設置代理并遵守AVAudioPlayerDelegate協議,<span style"font-family: Arial, Helvetica, sans-serif;"&g…

Ajax — 大事件項目(第一天)

應用的前端技術 Ajax (重要) — jQuery方式接口請求Layui 框架使用HTML CSS JS 項目說明和演示 線上 DEMO 項目地址&#xff1a;http://www.liulongbin.top:8086/項目的 API 接口地址&#xff1a; https://www.showdoc.cc/escook?page_id3707158761215217 項目請求根路徑…

JS,JQ 格式化小數位數

在<script>中&#xff1a; $(function(){   var num$(".price").length;/*獲取應用了class"price"的標簽數量*/   for(var i0;i<num;i){     if($(".price")[i].innerText!"")       $(".price")[i]…

iOS開發實用技巧—Objective-C中的各種遍歷(迭代)方式

說明&#xff1a; 1&#xff09;該文簡短介紹在iOS開發中遍歷字典、數組和集合的幾種常見方式。 2&#xff09;該文對應的代碼可以在下面的地址獲得&#xff1a;https://github.com/HanGangAndHanMeimei/Code 一、使用for循環 要遍歷字典、數組或者是集合&#xff0c;for循環是…

windows系統作為客戶端時,linux中本地yum源掛載時,如何同時掛載DVD1和DVD2?

這里以CentOS6.5為例.他的鏡像有兩個DVD1和DVD2.DVD1中是系統和主要的安裝包,DVD2中是剩下的安裝包 當掛載時如果要同時掛載DVD1和DVD2.需要這樣做: 1)在虛擬機的設置中選擇連接 2)分別在mnt下創建cdrom和cdrom1文件夾 3)到dev下查看有軟連接 cdrom->sr0 cdrom1->sr1 這里…

Ajax — 大事件項目(第二天)

大事件-02 fix一個bug 原因&#xff1a; 開始做注冊的時候&#xff0c;頁面中只有一個 namepassword的input&#xff0c;所以 $(‘input[name“password”]’) 可以準確的找到元素后來做登錄的時候&#xff0c;頁面中多了一個namepassword的input&#xff0c;所以$(‘input[…

OpenCV自帶dnn的Example研究(3)— object_detection

這個博客系列&#xff0c;簡單來說&#xff0c;今天我們就是要研究https://docs.opencv.org/master/examples.html下的6個文件&#xff0c;看看在最新的OpenCV中&#xff0c;它們是如何發揮作用的。在配置使用的過程中&#xff0c;需要注意使用較高版本的VS避免編譯器兼容問題&…