Ajax請(qǐng)求

XMLHttpRequest

XMLHttpRequest可以以異步方式的請(qǐng)求數(shù)據(jù)處理程序, 可實(shí)現(xiàn)對(duì)網(wǎng)頁的部分更新潭陪, 而不是刷新整個(gè)頁面垒迂。這個(gè)請(qǐng)求是異步的畔派,即在往服務(wù)器發(fā)送請(qǐng)求時(shí)基跑,并不會(huì)阻礙程序的運(yùn)行蒲障,瀏覽器會(huì)繼續(xù)渲染后續(xù)的結(jié)構(gòu)闷沥。

響應(yīng) readyState(onreadystatechange)

readyState有五種可能的值:
xhr.readyState = 0時(shí)萎战,UNSENT open尚未調(diào)用
xhr.readyState = 1時(shí),OPENED open已調(diào)用
xhr.readyState = 2時(shí)舆逃,HEADERS_RECEIVED 接收到頭信息
xhr.readyState = 3時(shí)蚂维,LOADING 接收到響應(yīng)主體
xhr.readyState = 4時(shí)戳粒,DONE 響應(yīng)完成

請(qǐng)求由客戶端發(fā)起,其規(guī)范為:請(qǐng)求行虫啥、請(qǐng)求頭蔚约、請(qǐng)求主體
Ajax.png

注意點(diǎn) :
get請(qǐng)求,設(shè)置請(qǐng)求行時(shí),需要把參數(shù)列表拼接到url后面
get請(qǐng)求不用設(shè)置請(qǐng)求頭, 不用說明請(qǐng)求主體的編碼方式
get請(qǐng)求的請(qǐng)求體為null

登陸小案例(后臺(tái)PHP)

用戶名:<input type="text" id="userInp">
密碼:<input type="password" id="pswInp">
<button id="btn">登陸</button>

<script>
    var user = document.getElementById("userInp");
    var pwd = document.getElementById("pswInp");
    var btn = document.getElementById("btn");

    btn.onclick = function(){
        //獲取用戶名和密碼
        var username = user.value;
        var password = pwd.value;
        
        //XMLHttpRequest對(duì)象
        var xhr = new XMLHttpRequest();
        //基于http協(xié)議:請(qǐng)求行,請(qǐng)求頭涂籽,請(qǐng)求主體
        xhr.open("post","06-login.php");
        // post 請(qǐng)求需要在請(qǐng)求頭中, 設(shè)置請(qǐng)求體的編碼方式
        xhr.setRequestHeader("content-type","application/x-www-form-urlencoded");
        // 發(fā)送請(qǐng)求體, post 請(qǐng)求參數(shù)在請(qǐng)求體中
        xhr.send("username=" + username + "&password=" + password);

        //處理響應(yīng)苹祟,監(jiān)聽readyState
        xhr.onreadystatechange = function(){
            if(xhr.readyState === 4 && xhr.status === 200){
                var result = xhr.responseText;
                if(result === "yes"){
                    //登陸成功,跳轉(zhuǎn)
                    location.href = "06-index.html";
                }else{
                    alert ("用戶名或者密碼錯(cuò)誤");
                }  
            }
        }
    }
</script>

PHP后臺(tái)

注意:運(yùn)行PHP文件可以使用phpStudy

<?php
    header('content-type:text/html;charset=utf-8');
    $username = $_POST['username'];
    $password = $_POST['password'];
    if($username === 'lose' && $password === '123'){
        //登陸成功
        echo "yes";
    }else{
        echo "no";
    }
?>

jQuery中的ajax

$.ajax()方法詳解

url

要求為String類型的參數(shù),(默認(rèn)為當(dāng)前頁地址)發(fā)送請(qǐng)求的地址评雌。

type

要求為String類型的參數(shù)树枫,請(qǐng)求方式(post或get)默認(rèn)為get。注意其他http請(qǐng)求方法景东,例如put和delete也可以使用砂轻,但僅部分瀏覽器支持。

data

類型:String
發(fā)送到服務(wù)器的數(shù)據(jù)斤吐。將自動(dòng)轉(zhuǎn)換為請(qǐng)求字符串格式搔涝。GET 請(qǐng)求中將附加在 URL 后。查看 processData 選項(xiàng)說明以禁止此自動(dòng)轉(zhuǎn)換和措。必須為 Key/Value 格式庄呈。如果為數(shù)組,jQuery 將自動(dòng)為不同值對(duì)應(yīng)同一個(gè)名稱派阱。如 {foo:["bar1", "bar2"]} 轉(zhuǎn)換為 '&foo=bar1&foo=bar2'诬留。

dataType

類型:String
預(yù)期服務(wù)器返回的數(shù)據(jù)類型。如果不指定颁褂,jQuery 將自動(dòng)根據(jù) HTTP 包 MIME 信息來智能判斷故响,比如 XML MIME 類型就被識(shí)別為 XML傀广。在 1.4 中颁独,JSON 就會(huì)生成一個(gè) JavaScript 對(duì)象,而 script 則會(huì)執(zhí)行這個(gè)腳本伪冰。隨后服務(wù)器端返回的數(shù)據(jù)會(huì)根據(jù)這個(gè)值解析后誓酒,傳遞給回調(diào)函數(shù)≈簦可用值:

"xml": 返回 XML 文檔靠柑,可用 jQuery 處理。
"html": 返回純文本 HTML 信息吓懈;包含的 script 標(biāo)簽會(huì)在插入 dom 時(shí)執(zhí)行歼冰。
"script": 返回純文本 JavaScript 代碼。不會(huì)自動(dòng)緩存結(jié)果耻警。除非設(shè)置了 "cache" 參數(shù)隔嫡。注意:在遠(yuǎn)程請(qǐng)求時(shí)(不在同一個(gè)域下)甸怕,所有 POST 請(qǐng)求都將轉(zhuǎn)為 GET 請(qǐng)求。(因?yàn)閷⑹褂?DOM 的 script標(biāo)簽來加載)
"json": 返回 JSON 數(shù)據(jù) 腮恩。
"jsonp": JSONP 格式梢杭。使用 JSONP 形式調(diào)用函數(shù)時(shí),如 "myurl?callback=?" jQuery 將自動(dòng)替換 ? 為正確的函數(shù)名秸滴,以執(zhí)行回調(diào)函數(shù)武契。
"text": 返回純文本字符串

success

類型:Function
請(qǐng)求成功后的回調(diào)函數(shù)。
參數(shù):由服務(wù)器返回荡含,并根據(jù) dataType 參數(shù)進(jìn)行處理后的數(shù)據(jù)咒唆;描述狀態(tài)的字符串。
更多參數(shù)請(qǐng)參考:https://www.w3school.com.cn/jquery/jquery_ref_ajax.asp

上面的登陸案例可以簡(jiǎn)化為

用戶名:<input type="text" id="userInp">
密碼:<input type="password" id="pswInp">
<button id="btn">登陸</button>

<script src="./jquery-1.12.4.js"></script>
<script>
  $('#btn').click(function(){
    var username = $('#userInp').val();
    var password = $('#pswInp').val();
    $.ajax({
      // 請(qǐng)求地址
      url: '06-login.php',
      // 請(qǐng)求方式
      type: 'POST',
      // 數(shù)據(jù)
      data: {
          username: username,
          password: password 
      },
      // 數(shù)據(jù)類型
      dataType: 'text',
      // 請(qǐng)求成功
      success: function(info) {
        console.log(info)
        if(info === 'yes') {
          location.href = "06-index.html";
        }
      },
      // 請(qǐng)求失敗
      error: function(e) {
        console.log(e)
      }
    })
  })
</script>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末释液,一起剝皮案震驚了整個(gè)濱河市钧排,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌均澳,老刑警劉巖恨溜,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異找前,居然都是意外死亡糟袁,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門躺盛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來项戴,“玉大人,你說我怎么就攤上這事槽惫≈芏#” “怎么了?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵界斜,是天一觀的道長(zhǎng)仿耽。 經(jīng)常有香客問我,道長(zhǎng)各薇,這世上最難降的妖魔是什么项贺? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮峭判,結(jié)果婚禮上开缎,老公的妹妹穿的比我還像新娘。我一直安慰自己林螃,他們只是感情好奕删,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著疗认,像睡著了一般完残。 火紅的嫁衣襯著肌膚如雪砌滞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天坏怪,我揣著相機(jī)與錄音贝润,去河邊找鬼。 笑死铝宵,一個(gè)胖子當(dāng)著我的面吹牛打掘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鹏秋,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼尊蚁,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了侣夷?” 一聲冷哼從身側(cè)響起横朋,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎百拓,沒想到半個(gè)月后琴锭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡衙传,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年决帖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蓖捶。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡地回,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出俊鱼,到底是詐尸還是另有隱情刻像,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布并闲,位于F島的核電站细睡,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏焙蚓。R本人自食惡果不足惜纹冤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一洒宝、第九天 我趴在偏房一處隱蔽的房頂上張望购公。 院中可真熱鬧,春花似錦雁歌、人聲如沸宏浩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽比庄。三九已至求妹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間佳窑,已是汗流浹背制恍。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留神凑,地道東北人净神。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像溉委,于是被迫代替她去往敵國(guó)和親鹃唯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350