NFH.010 - ajax基礎與實踐


12.28學習經驗分享#

Bruce_Zhu于2016.12.29


一、同步交互與異步交互

  1. 客戶端想服務器端發送請求,直到服務器端進行響應,這個過程中,用戶是不能做任何其他事情的(等)

  2. 客戶端想服務端發送請求,直到服務端進行響應,這個過程中,用戶是可以做其他事情的(不用等)

二、AJAX

  1. asynchronous javascript and xml,直譯中文-javascript和xml的異步

  2. AJAX是一種用來改善用戶體驗的技術,其實質是,使用XMLHttpRequest對象異步地向服務器發請求

  3. 服務器返回部分數據,而不是一個完整的頁面,以頁面無刷新的效果更改頁面中的局部內容

  4. Ajax的核心對象

    XMLHttpRequerst對象

  5. 獲取XMLHttpRequest對象

    function getXhr(){

    var xhr = null;
    if(window.XMLHttpRequest){
        //除IE外的其他瀏覽器
        xhr = new XMLHttpRequest();
    }else{
        
        xhr = new ActiveXObject("Microsoft.XMLHttp");
    
    }
    
    return xhr;
    

    }

  6. 屬性

    1. readyState 請求狀態
    0 尚未初始化
    1正在發送請求
    2請求完成
    3請求成功,正在接受數據
    4數據接收成功
    
    1. status 請求響應值

      200 表示請求成功
      202 請求被接受但處理未完成
      400 錯誤的請求
      404 資源未找到
      500 內部服務器錯誤,如asp代碼錯誤等

    2. responseText 服務器返回的文本

    3. responseXML 服務器返回的xml,可以當做DOM處理

  7. 方法

    open(method,url) - 與服務端建立連接

    send() - 向服務器端發送請求

    abort() - 取消請求

    getAllResponseHeaders()
    得到響應的所有http頭

    getResponseHeader()
    獲取指定的http頭

    setRequestHeader()
    指定請求的Http頭

  8. 事件

    onreadystatechange事件
    作用 - 監聽服務端的通信狀態改變

    當Ajax對象的readyState的值發生了改變,比如,從0變成了1,就會產生readystatechange事件

三、實現ajax的異步交互步驟

  1. 創建XMLHttpRequest核心對象
    固定寫法-獨立編寫

  2. 與服務區建立連接
    使用XMLHttpRequest對象的open(method,url)

  3. 向服務器發送請求
    使用XMLRequest對象的send()方法
    請求參數的格式 - key=value

  4. 接受服務器響應的數據

    使用XMLHttpRequest對象的readystatechange事件監聽服務器端的通信狀態

    使用XMLHttpRequest對象的readyState屬性,判斷服務器端當前狀態(0-4)

    使用XMLHttpRequest對象的statue屬性,判斷服務器端的狀態碼(200)

    使用XMLHttp對象的responseText屬性,接受服務器端的響應數據

注意:get與post方式

  get請求方式

    send()方法不起作用,但是不能被省略
    xhr.send(null) 請求參數,添加到url?key=value
     
  post請求方式

    必須要在send()方法調用之前,使用setRequestHeader()方法設置請求頭,參數為key-value

    xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

四、接收服務器端的響應數據

  1. 使用XMLHttpRequest核心對象的responseText屬性

    該屬性只能接受文本(HTML)格式

    問題:
    解析過程比較復雜,而且在拼串或拆串過程容易出錯

  2. XML格式的數據

  3. json格式的數據

五、XML

  1. HTML/XHTML/DHTML/XML

    HTML: 網頁文檔
    XHTML:更嚴格的網頁文檔
    DHTML:DOM|DOM
    XML: 可擴展的標記語言,可用于配置文件|數據格式

  2. XML的文件為.xml

  3. XML的定義方式與HTML非常相似

    HTML的元素都是預定義好的
    XML允許自定義元素

  4. XML版本

    1.0版本 1.1版本,幾乎沒人使用

  5. XML作用

    作為數據格式-存儲數據的地方

  6. XML語法

    1)聲明

    <?xml version="1.0" encoding="utf-8" ?>
    
    version-設置XML文件的版本
    encoding-設置XML文件的編碼
    
    聲明必須出現在0行0列上
    

    2)定義元素

    根元素,必須是雙標簽,只能定義一個
    
    定義元素,元素名可以自定義,既可以雙標簽也可以是單標簽
    

    練習:使用XML定義省份和城市信息

六、DOM解析XML字符串

  1. 創建DOM解析XML的解析器,解析器解析XML字符串

    IE瀏覽器

      var parser = new ActiveXObject("Microsoft.XMLDOM");
        
      parser.async = false;
        
      xmlDoc = parser.loadXML(xmlFile);


    其他游覽器  

      var parser = new DOMParser();

      var xmlDoc = parser.parseFromString(xmlFile,"application/xml");
  1. 解析XML元素與解析HTML元素一致

    獲取元素最常用的是getElementsByTagName很少使用ById和ByName

PS:

 瀏覽器不允許讀取外部的XML文件
 瀏覽器解析符合XML格式的字符串

七、Ajax的XML

1.請求的數據格式-XML

  1)客戶端如何構建XML格式的數據

    構建的數據類型 - 字符串類型
    字符串的內容要符合XML格式的語法要求

  2)服務器端如何接受符合XML格式的數據

     接收到的客戶端的請求數據 - 字符串類型,php集成了DOM的相關內容

       DOMDocument
       DOMElement
       DOMNode

2.響應的數據格式-XML

  1)服務器端如何構建符合XML格式的數據

    設置服務器端的響應頭Content-Type值為text/xml

      header("Content-Type:text/xml");

    構建符合XML格式的數據內容

       手動方式構建字符串內容

       DOMDocument對象的方法
         loadXML(符合XML格式的字符串)
         saveXML()方式進行響應

  2)客戶端如何接受XML格式的數據

      使用XMLHttpRequest對象的responseXML屬性接收

      接收到的就是XML DOM對象(不需要進行解析)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,321評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,559評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,442評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,835評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,581評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,922評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,931評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,096評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,639評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,374評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,591評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,104評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,789評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,196評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,524評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,322評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,554評論 2 379

推薦閱讀更多精彩內容

  • 本文詳細介紹了 XMLHttpRequest 相關知識,涉及內容: AJAX、XMLHTTP、XMLHttpReq...
    semlinker閱讀 13,707評論 2 18
  • Ajax和XMLHttpRequest 我們通常將Ajax等同于XMLHttpRequest,但細究起來它們兩個是...
    changxiaonan閱讀 2,259評論 0 2
  • AJAX 原生js操作ajax 1.創建XMLHttpRequest對象 var xhr = new XMLHtt...
    碧玉含香閱讀 3,253評論 0 7
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,826評論 18 139
  • 看到標題時,有些同學可能會想:“我已經用xhr成功地發過很多個Ajax請求了,對它的基本操作已經算挺熟練了。” 我...
    前端渣渣閱讀 5,780評論 1 12