AJAX-2

複習:

 

AJAX:異步JS和XML,涉及到HTML、CSS、JS、DOM、HTTP、XML、JSON等。目標:無刷新無提交情況下實現頁面內容局部更新,提高瀏覽體驗。

使用XHR發起異步請求步驟:

(1)創建XHR

(2)監聽XHR的狀態改變  0 1 2 3 4

(3)連接到Web服務器

(4)發送請求消息

 


今日目標:

(1)複習XHR發起兩種請求

(2)學習XHR接收五種響應 —— 重點

 

 

 

1.使用XHR發起兩種請求之一——GET

  //1 var xhr = new XMLHttpRequest();

  //2 xhr.onreadystatechange = function(){}

  //3 xhr.open('GET', 'x.php?k=v&k=v', true)

  //4 xhr.send(null);

 

2.使用XHR發起兩種請求之二——POST

  //1 var xhr = new XMLHttpRequest();

  //2 xhr.onreadystatechange = function(){}

  //3 xhr.open('POST', 'x.php', true)

  //3.5 xhr.setRequestHeader('Content-Type',  'application/x-www-form-urlencoded')

  //4 xhr.send('k=v&k=v')

 

3.使用XHR接收五種響應——text/plain

  服務器端:

       header('Content-Type: text/plain');

       echo 'succ';

  客戶端:

       if( xhr.responseText==='succ'){ ... }


 

 

4.使用XHR接收五種響應——text/html

  注意:AJAX應用中服務器返回的不是完整的HTML文檔,而只是HTMP標籤組成的片段

  服務器端:

       header(' Content-Type: text/html;charset=UTF-8  ');

       echo '<li>xx</li><li>yy</li>';

  客戶端:

       ul.innerHTML = xhr.responseText;

 

  

       input.onkeyup = function(){  var kw = this.value;   }

擴展SQL語句——如何進行模糊查詢

SELECT * FROM book WHERE bname='指南'; //精準匹配

SELECT * FROM book WHERE bname LIKE '指南'; //精準匹配

SELECT * FROM book WHERE bname LIKE '%指南%'; //%匹配任意多個任意字符——模糊匹配

 

 

5.使用XHR接收五種響應——application/javascript

  注意:JavaScript代碼在PHP解釋器看來就是普通的字符串而已;

  服務器端:

       header(' Content-Type: application/javascript');

       echo 'alert(123);document.body.appendChild(...)';

  客戶端:

       eval( xhr.responseText ) //客戶端必須使用eval來執行JS字符串

 

  案例演示:實現了國際化(i18n)的歡迎消息

  (1)編寫PHP:i18n.php,解析客戶端請求消息頭部,獲取當前客戶端的首選語言,根據語言的不同,返回不同形式的歡迎消息,如alert('你好');  或 console.log('こんにちは');  或 var s = document.createElement('span'); s.innerHTML = 'Hello'; document.body.append(s);

  (2)編寫HTML,i18n.html,一個按鈕“獲取歡迎消息”,點擊後發起異步的GET請求,獲得響應消息後,執行出來。

 

 

服務器如何返回批量的複合數據給客戶端?

複合數據:一個數據有多個屬性

批量複合數據:有多個複合數據 —— 二維數組

方式1:用text/plain格式

101#三星#35.5#1.jpg@102#閃迪#34.5#2.jpg@金士頓#...

好處:簡單

不足:不易讀取、很容易出錯

方式2:用text/html格式

<tr><td>101</td><td>三星</td><td>35.5</td></tr>

<tr><td>102</td><td>閃迪</td><td>35.5</td></tr>

<tr><td>103</td><td>金士頓</td><td>35.5</td></tr>

好處:情形,方便使用   tbody.innerHTML = xhr.responseText

不足:把數據和格式混在一起,限制了數據的應用場合

方式3:用application/xml格式

<productList>

  <product pid="101">

     <pname>三星</pname>

     <price>35.5</price>

     <pic>1.jpg</pic>

  </product>

  <product pid="102">

     <pname>閃迪</pname>

     <price>34.5</price>

     <pic>2.jpg</pic>

  </product>

</ productList>

好處:是純數據,不附帶任何的顯示格式限制

不足:太複雜了,閱讀和解析都太麻煩

方式3:用application/json格式

[

  {

     "pid":"101",

     "pname":"三星",

     "price":35.5,

     "pic":"1.jpg"

  },

  {

     "pid":"102",

     "pname":"閃迪",

     "price":34.5,

     "pic":"2.jpg"

  }

]

有點:簡單、易於閱讀,處理速度快!

 

6.XML語法學習

  eXtensible Markup Language,可擴展的標籤語言,本身是一種字符串格式,用於描述批量複合數據,語法:

  (1)所有的數據放在標籤中:

       <名>數據</名>

       <名 />

  (2)整個XML字符串有且只能有一個根標籤

  (3)所有的標籤名都可以自定義,但嚴格區分大小寫,且開始和結束標記必須完全一樣

  (4)每個標籤都可以自定義屬性,屬性必須有值,值必須用單引號/雙引號括起來

  (5)每個標籤都可以定義任意的子標籤,標籤可以嵌套,但不能交叉

 

注意:HTML和XML的區別——面試題

         HTML語法隨意;XML語法嚴格;

         HTML標籤預定義好了;XML標籤都是自定義的;

         HTML用於描述網頁的結構;XML標籤用於描述數據;

 

7.使用XHR接收五種響應——application/xml

  服務器端:

       header('Content-Type: application/xml');

       echo '<?xml ?><productList>....</productList>';

  客戶端:

       //xhr.responseText   //把字符串解析爲DOM對象很麻煩

       xhr.responseXML  //DOM樹的根對象

  案例演示:異步加載更多數據

  (1)編寫SQL:dangdang.sql,表book(...)

  (2)編寫PHP:book_select.php,向客戶端返回所有的數據,以XML字符串格式

  (3)編寫HTML:book_select.html,點擊“加載更多”按鈕時,再次請求更多的書籍信息

W3C DOM標準分爲三部分:

核心DOM: 可以操作任意的DOM樹,如getElementById()、querySelector()、getAttribute()....

HTML DOM:

XML DOM:

 

 

8.JSON字符串格式的語法

  JSON(JavaScript Object Notation) 是一種輕量級的字符串數據格式。 易於人閱讀和編寫;同時也易於機器解析和生成;在Web編程領域可以取代XML字符串格式!

  (1)數據分爲兩種:  [ ]     { }

  (2)整個字符串要麼是一個數組、要麼是一個對象

  (3)數組中可以包含各種: 數字、boolean、字符串、null、[]、 {}

  (4)對象中可以包含多個鍵值對,鍵必須用雙引號,值若是字符串也必須用雙引號

 

 

 

9.使用XHR接收五種響應——application/json

  服務器端:

       header('Content-Type: application/json;charset=UTF-8');

       $arr = ....;

       $str = json_encode($arr);  //把PHP數組轉換爲JSON字符串

       echo $str;

  客戶端:

       JSON.parse( xhr.responseText ); //把JSON字符串解析爲JS對象

 

 

=============================

10.ES6中新的字符串

  var str = `

       phone=${p}&pwd=${w}

  `;

  反引號字符串可以換行;可以包含${}的變量或表單式。

 

 

課下練習:

功能要求:

  (1)編寫SQL,數據庫名: tarena,員工信息表emp(eid,ename,pic, salary,deptID),保存多個員工的信息;

  (2)編寫PHP,emp_select.php,根據客戶端提交的部門編號(deptID),返回該部門下的員工信息;

(3)編寫HTML,emp_select.html,下拉框中選擇不同的部門,則下方的員工列表顯示出該部門的員工信息;

    select.onchange = function(){ this.value }

(4)點擊“刪除”,發起異步請求刪除該員工信息,服務器返回刪除成功信息後,前端頁面將表格中的當前行刪除。

 

發佈了64 篇原創文章 · 獲贊 3 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章