Ajax

ajax是一種技術(shù)方案,但并不是一種新技術(shù)。它依賴(lài)的是現(xiàn)有的CSS/HTML/Javascript,而其中最核心的依賴(lài)是瀏覽器提供的XMLHttpRequest對(duì)象,是這個(gè)對(duì)象使得瀏覽器可以發(fā)出HTTP請(qǐng)求與接收HTTP響應(yīng)。 實(shí)現(xiàn)在頁(yè)面不刷新的情況下和服務(wù)端進(jìn)行數(shù)據(jù)交互。

XMLHttpRequest

Ajax是一種技術(shù)方案,但并不是一種新技術(shù)。它依賴(lài)的是現(xiàn)有的CSS/HTML/Javascript,而其中最核心的依賴(lài)是瀏覽器提供的 XMLHttpRequest對(duì)象,是這個(gè)對(duì)象使得瀏覽器可以發(fā)出HTTP請(qǐng)求與接收HTTP響應(yīng)。

所以用一句話(huà)來(lái)總結(jié)兩者的關(guān)系,就是:我們使用XMLHttpRequest對(duì)象來(lái)發(fā)送一個(gè)Ajax請(qǐng)求。

創(chuàng)建XMLHttpRequest對(duì)象

一般使用new關(guān)鍵字進(jìn)行創(chuàng)建,然后賦值給一個(gè)變量,

var xhr = new XMLHttpRequest();
XMLHttpRequest對(duì)象的常用屬性

1、readyState
只讀屬性,表示XMLHttpRequest請(qǐng)求當(dāng)前所處的狀態(tài),共有五個(gè)數(shù)字值(0,1,2,3,4,5)。

  • 0:表示XMLHttpRequest實(shí)例已經(jīng)生成,但是open()方法還沒(méi)有被調(diào)用。
  • 1:表示已調(diào)用open方法,但還未調(diào)用send方法(請(qǐng)求還未被發(fā)送出去),仍然可以使用setRequestHeader(),設(shè)定HTTP請(qǐng)求的頭信息。
  • 2:表示send方法已調(diào)用,數(shù)據(jù)已發(fā)送,并且服務(wù)器接收到了請(qǐng)求。
  • 3:表示服務(wù)器正在傳輸數(shù)據(jù)。
  • 4:表示數(shù)據(jù)傳輸完成。

2、status
只讀屬性,表示本次請(qǐng)求所得到的HTTP狀態(tài)碼,返回一個(gè)整數(shù)。一般來(lái)說(shuō),如果通信成功的話(huà),這個(gè)狀態(tài)碼是200。常用的有如下幾個(gè)狀態(tài)碼:

  • 200:OK(正常訪(fǎng)問(wèn));
  • 301:Moved Permanently(永久移動(dòng));
  • 302:Moved temporarily(暫時(shí)移動(dòng));
  • 304:Not Modified(未修改);
  • 307:Temporary Redirect(暫時(shí)重定向);
  • 401:Unauthorized (未授權(quán));
  • 403:Forbidden(禁止訪(fǎng)問(wèn));
  • 404:Not Found(未找到該網(wǎng)址);
  • 500:Internal Server Error (找到網(wǎng)址但服務(wù)器發(fā)生錯(cuò)誤);
    基本上,只有200和304的狀態(tài)碼,表示服務(wù)器返回是正常狀態(tài)。

XMLHttpRequest對(duì)象的常用方法

  1. open()

XMLHttpRequest對(duì)象的open方法用于指定發(fā)送HTTP請(qǐng)求的參數(shù),常用的有三個(gè)參數(shù):

第一個(gè)參數(shù):請(qǐng)求的類(lèi)型(常用get或者post);

第二個(gè)參數(shù)是接口名和:這里要分兩種情況:

get請(qǐng)求時(shí):接口名+請(qǐng)求參數(shù)(鍵值對(duì)形式);post請(qǐng)求時(shí):只需要接口名(需要傳遞的參數(shù)寫(xiě)在send方法里);

第三個(gè)參數(shù):一個(gè)布爾值,指定是否異步(true為異步,false為同步,通常為true,默認(rèn)為true);

  1. send()

send方法用于實(shí)際發(fā)出HTTP請(qǐng)求。如果不帶參數(shù),就表示HTTP請(qǐng)求只包含頭信息,也就是只有一個(gè)URL,典型例子就是GET請(qǐng)求;如果帶有參數(shù),就表示除了頭信息,還帶有包含具體數(shù)據(jù)的信息體,典型例子就是POST請(qǐng)求。

Ajax 的get寫(xiě)法
var xhr = new XMLHttpRequest()
xhr.open('GET', '請(qǐng)求地址', true)
xhr.onreadystatechange = function(){
    if(xhr.readyState === 4) {
        if((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304){
            //成功了
            console.log(xhr.responseText)
        } else {
            console.log('服務(wù)器異常')
        }
    }
}
xhr.onerror = function(){
    console.log('服務(wù)器異常')
}
xhr.send()
Ajax 的post寫(xiě)法
 var xhr = new XMLHttpRequest()
  xhr.timeout = 3000        //可選,設(shè)置xhr請(qǐng)求的超時(shí)時(shí)間
  xhr.open('POST', '/register', true)

  xhr.onload = function(e) { 
    if((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304){
      console.log(this.responseText)
    }
  }
    //可選
  xhr.ontimeout = function(e) { 
        console.log('請(qǐng)求超時(shí)')
  }

  //可選
  xhr.onerror = function(e) {
      console.log('連接失敗')
  }
  //可選
  xhr.upload.onprogress = function(e) {
      //如果是上傳文件,可以獲取上傳進(jìn)度
  }

  xhr.send('username=jirengu&password=123456')
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • AJAX 原生js操作ajax 1.創(chuàng)建XMLHttpRequest對(duì)象 var xhr = new XMLHtt...
    碧玉含香閱讀 3,569評(píng)論 0 7
  • ??2005 年,Jesse James Garrett 發(fā)表了一篇在線(xiàn)文章,題為“Ajax: A new App...
    霜天曉閱讀 943評(píng)論 0 1
  • 一、Ajax是什么 Ajax:全稱(chēng)是“Asynchronous Javascript And Xml”,翻譯成...
    前端攻城獅子王閱讀 622評(píng)論 0 4
  • 瀏覽器與服務(wù)器之間,采用HTTP協(xié)議通信。用戶(hù)在瀏覽器地址欄鍵入一個(gè)網(wǎng)址,或者通過(guò)網(wǎng)頁(yè)表單向服務(wù)器提交內(nèi)容,這時(shí)瀏...
    許先生__閱讀 551評(píng)論 1 2
  • 1.MyBatis Mapper.xml文件中 $和#的區(qū)別 例子中假設(shè)參數(shù)名為 paramName,類(lèi)型為 VA...
    待我成王帶你狂閱讀 372評(píng)論 0 0

友情鏈接更多精彩內(nèi)容