1. 程式人生 > 其它 >AJAX入門以及get和post請求

AJAX入門以及get和post請求

優點:

1在不重新整理的情況下,與服務端進行通訊; **突出優勢**

2允許根據使用者事件來更新部分頁面

缺點: 

1沒有瀏覽歷史不能回退;

2存在跨域問題(同源),即從a.com向b.com 傳送請求是不可以的 

3.SEO不友好 (Search Engine Optimization)  搜尋引擎優化 

 

 同源: 協議,埠號,域名,必須完全相同

違背同源策略就是跨域.

 跨域解決方案: 

1JSONP (只支援get請求)

 利用script標籤來實現跨域, link img iframe 等

 2.CORS(官方推出)  完全在服務端處理

 

請求報文和響應報文的格式: 行  頭  空行  體

 

 

Access-Control-Allow-Origin 響應頭指定了該響應的資源是否被允許與給定的origin共享。

 語法: 

Access-Control-Allow-Origin: *  //允許所有資源都可以訪問的資源
Access-Control-Allow-Origin: <origin>  

如需允許特定域名 如(https://developer.mozilla.org)訪問您的資源,您可以設定:

Access-Control-Allow-Origin: https://developer.mozilla.org


案例1: get()方法

在啟動前:(已經安裝了node.js,它包括了npm)
需要用npm安裝express,安裝好後並且執行node server.js(當然還是很可能不成功,建議去看尚XX的視訊,細節太多了說不完)
html:
<!DOCTYPE html> <html lang="en">
<head>     <meta charset="UTF-8">     <meta http-equiv="X-UA-Compatible" content="IE=edge">     <meta name="viewport" content="width=device-width, initial-scale=1.0">     <title></title>     <style>         #result {             width: 200px;             height: 100px;             border: solid 1px aqua;         }     </style> </head>
<body>     <button>點擊發送請求</button>     <div id="result"></div>     <script>         var result = document.querySelector('#result')         var btn = document.querySelector('button')         btn.onclick = function () {             //建立物件             const xhr = new XMLHttpRequest();             //初始化             xhr.open('GET', 'http://127.0.0.1:8000/server?a=100&b=200&c=300');             //傳送             xhr.send();             //             //readystate是 xhr物件中的屬性,表示狀態:             // 0被初始化  1open呼叫完畢 2send方法呼叫完畢  3服務端返回的部分的結果 4服務端返回的所有結果             //change 可以觸發4次             xhr.onreadystatechange = function () {                 //判斷 (服務端返回了所有的結果)                 if (xhr.readyState === 4) {                     //判斷響應狀態碼 200 404 401 500 302(一直沒法請求,在重新讀快取)                     //2XX 都是成功,具體的200-300都是成功                     if (xhr.status >= 200 && xhr.status < 300) {                         //處理結果 行 頭 空行 體                         //1.響應行                         console.log(xhr.status); //狀態碼                         console.log(xhr.statusText);//狀態字串                         console.log(xhr.getAllResponseHeaders());//所有響應頭                         console.log(xhr.response); //響應體
                        //設定 reslut的文字                         result.innerHTML = xhr.response; //點選即可出現  hello GET                     } else {                     }                 }             }         }     </script> </body>
</html>   server.js:(檔名最好是這個,不然要去調程式碼,把server換成你想的)
//1.引入express
const express = require('express');
//2. 建立應用物件 const app = express();
//3.建立路由規則 app.get('/server', (request, response) => {     //設定響應頭  為了設定允許跨域     response.setHeader('Access-Control-Allow-Origin', '*');
    //設定響應體     response.send('hello GET '); });   //4.監聽埠啟動服務 app.listen(8000, () => {     console.log('服務已經啟動, 8000 埠監聽中....') })     get和post請求的對比:   get——從指定的資源請求資料; post——向指定的資源提交要被處理的資料。

查詢字串(名稱/值對)是在 GET 請求的 URL 中傳送的:

/test/demo_form.php?name1=value1&name2=value2

查詢字串(名稱/值對)是在 POST 請求的 HTTP 訊息主體中傳送的:

POST /test/demo_form.php HTTP/1.1
Host: kkxx.com
name1=value1&name2=value2 get: 可以快取,不夠安全, 請求有長度限制,可以前進後退,只應用於取回資料。資料型別只允許ASCII 字元。 post:不可快取,安全,請求長度沒有限制。對資料型別也沒有限制