jQuery中ajax的相關知識點彙總
前言
學習javascript的同學都知道,AJAX (async javascript and
xml)翻譯叫做非同步的JavaScript和XML,在原生js中使用傳送網路請求也是一件麻煩事,每次都是那幾個步驟.
我們先來回顧一下在原生js中如何傳送一個 ajax 網路請求
經典4步曲
1.原生js的ajax網路請求
// IE9及以上 // const xhr = new XMLHttpRequest() // IE9以下 // const xhr = new ActiveXObject('Mricosoft.XMLHTTP') // 對於這個相容寫法我們可以用一個函式來封裝 function createXHR() { var req = null; if (window.XMLHttpRequest) { // 如果有這個XMLHttpRequest物件就直接使用 req = new XMLHttpRequest(); } else { // 否則就使用IE8一下的寫法 req = new ActiveXObject("Microsoft.XMLHTTP"); } return req; } // 第一步:建立ajax物件 var xhr = createXHR(); //這樣就拿到了一個ajax物件 // 第二步:配置網路請求資訊 xhr.open('get','./demo.php',true) // xhr.open('get/post','要傳送網路請求去哪個地址',同步還是非同步預設 true 表示非同步,false 表示同步) // 如果是get請求有引數需要拼接在地址後面,例如'./demo.php?id=2&name=sanqi' // 如果是post請求,引數就要放在send()裡面,例如:xhr.send('id=2&name=sanqi') // 第三步:傳送網路請求 xhr.send() // // 第四部:判斷響應狀態拿到資料 xhr.onreadyStateChange = function () { // 每次 readyState 改變的時候都會觸發該事件 // 我們就在這裡判斷 readyState 的值是不是到 4 // 並且 http 的狀態碼是不是 200 ~ 299 if (xhr.readyState === 4 && /^2\d{2|$/.test(xhr.status)) { // 這裡表示驗證通過 // 我們就可以獲取服務端給我們響應的內容了 console.log(xhr.response); } }
這裡補充一下readyState的5個狀態
- readyState --> 0: 表示未初始化完成,也就是 open 方法還沒有執行
- readyState --> 1: 表示配置資訊已經完成,也就是執行完 open 之後
- readyState --> 2: 表示 send 方法已經執行完成
- readyState --> 3: 表示正在解析響應內容
- readyState --> 4: 表示響應內容已經解析完畢,可以在客戶端使用了
上面就是原生的js傳送一個ajax網路請求
2.關於使用jquery的ajax網路請求
我們在學習jquery,就瞭解到,大家都在說,什麼 jq 都給我們封裝好啦,這些網路請求都不用我們去寫啦,雖說如此,但是也還是不能盲目,還是 要具體瞭解之後才會使用.
(1).利用jquery傳送get請求
下面統一後端程式碼使用檔名為: test.php 這個檔案
<?php header('content-type:text/html;charset=utf-8;'); $id = $_REQUEST['id']; $name = $_REQUEST['name']; $arr = [ 'id' => $id,'name' => $name ]; echo json_encode($arr); ?>
使用jquery傳送get請求
$.get('.程式設計客棧/test.php','id=999&name=三七安',function (res) {
//第一個引數是請求的地址
//第二個引數是要傳送給伺服器的資料
//第三個引數是成功時的回撥函式,裡面包含服務返回給我們的資料
//第四個引數是我們希望拿到的資料格式:有幾種選擇:json,text,html,xml,script
console.log(res);
},'json')
可以看到請求是傳送成功了的
(2) 利用jquery傳送post請求
$.post('./test.php',{id:123,name:'post請求'},function (res) { //這裡其他引數和get請求一致的 //注意,這裡的傳輸資料我用 物件的格式來寫,也能傳送請求成功,也就是說 //無論是get請求還是post請求,想服務端傳資料,既可以使用字串格式也可以使用物件格式 console.log(res); },'json')
這是請求成功的的頁面
(3)利用jquery傳送綜合傳送 ajax 請求
先來瀏覽一下語法
// 使用 $.ajax 方法 // 只接受一個引數,是一個物件,這個物件對當前的請求進行所有的配置 $.ajax({ url: './ajax',// 必填,請求的地址 type: 'GET',// 選填,請求方式,預設是 GET(忽略大小寫) data: {},// 選填,傳送請求是攜帶的引數 dataType: 'json',// 選填,期望返回值的資料型別,預設是 string async: true,// 選填,是否非同步,預設是 true 程式設計客棧 success() {},// 選填,成功的回撥函式 error() {},// 選填,失敗的回撥函式 cache: true,// 選填,是否快取,預設是 true context: div,// 選填,回撥函式中的 this 指向,預設是 ajax 對程式設計客棧象 status: {},// 選填,根據對應的狀態碼進行函式執行 timeout: 1000,// 選填,超時事件 })
好像每次都要填好多引數,但其實大部分引數都是選填的,我們只要看實際情況來填寫
在編譯器裡面,直接輸入ajax也可以快捷生成部分程式碼
傳送ajax請求程式碼
$.ajax({ type: "get",url: "./test.php",data: { id:000,name:'傳送$.ajax請求的演示' },dataType: "json",success: function (response) { console.log(response); } });
開啟網頁就可以看到我們從後端拿回來的資料
下面補充幾個Ajax的全域性函式,也叫鉤子函式,也就是在Ajax整個請求過程中的某一個階段執行的函式,而且是任意一個Ajax請求都會觸發.
1. ajaxStart,任意一個請求開始的時候都會觸發這個函式
$(window).ajaxStart(function () { console.log('有一個請求開始了') })
2. ajaxSend,任意一個 請求準備send之前都會觸發這個請求.
$(window).ajaxSend(function () { console.log('有一個要傳送出去了') })
3.ajaxSuccess,任意一個 請求成功的時候都會觸發這個函式.
$(window).ajaxSuccess(function () { console.log('有一個請求成功了') })
4.ajaxError,任意一個 請求失敗的時候就會觸發這個函式.
$(window).ajaxError(function () { console.log('有一個請求失敗了') })
5.ajaxComplete,任意一個 請求完成的時候就會觸發這個函式
程式設計客棧
$(window).ajaxComplete(jncfKrqtqfunction () {
console.log('有一個請求完成了')
})
6.ajaxStop,任意一個 請求結束的時候就會觸發這個函式
$(window).ajaxStop(function () { console.log('有一個請求結束了') })
總結
到此這篇關於jQuery中ajax的相關知識點彙總的文章就介紹到這了,更多相關jQuery ajax知識點內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!