發送請求的幾種方式
1. 瀏覽器的地址框中輸入地址,回車
2. html --> head --> scrip / link
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? img? 自動發送請求,無需手動觸發
3. a 標簽,form 表單標簽
? ? ?需要手動控制提交產生,且往往需要在新的頁面上獲得響應信息
4. 運行 JS 代碼產生請求
? ? ? ? 我們通過事件觸發 JS 代碼運行,發送請求
? ? ? ? 響應后我們可以通過 JS 代碼動態處理是否要跳轉
? ? ? ? 或者要將響應的信息通過 DOM 編程顯示在 dom 樹中
通過第 4 中發送請求的方法,就可以實現如下功能:
當用戶在注冊頁面中,用戶名為 zhangsan 的時候,這個事件會觸發 JS 代碼運行,向后端發送請求,可以將響應的信息通過 DOM 編程顯示在 dom 樹中
什么是 AJAX
AJAX = Asynchronous JavaScript and XML(異步的 JavaScript 和 XML)
AJAX 不是新的編程語言,而是一種使用現有標準的新方法
AJAX 最大的優點是在不重新加載整個頁面的情況下,可以與服務器交換數據,并更新部分前端顯示頁面的內容
AJAX 不需要任何瀏覽器插件,但需要用戶允許 JavaScript 在瀏覽器上執行
XMLHttpRequest 只是實現 AJAX 的一種方法(原生 JS 的實現方式)
同步交互:發送方發出請求后,必須等待接收方處理并返回,在此期間,發送方會處于“阻塞”狀態,無法繼續執行其他操作,直到收到響應后才會繼續執行。
異步交互:發送方發出請求后,無需等待接收方返回響應,而是繼續執行后續操作。接收方處理完請求后,會通過某種方式,將結果反饋給發送方,雙方操作在時間上可以“不同步”。
如何實現 AJAX 請求
index.html:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
<script>function getMessage() {// 實例化一個 xmlHttpRequestvar request = new XMLHttpRequest();// 設置 xmlHttpRequest 對象的回調函數// request.readState 1 2 3 4// request.status 響應狀態碼 響應行狀態碼request.onreadystatechange = function (){if (request.readyState == 4 && request.status == 200) {// 接收響應結果,處理結果// 將響應放到指定的位置var inputEle = document.getElementById("message");inputEle.value = request.responseText;}}// 設置發送請求的方式和請求的資源路徑request.open("GET", "/hello?username=zhangsan");// 發送請求request.send();}
</script>
</head>
<body>
<button onclick="getMessage()">按鈕</button>
<input type = "text" id = "message" />
</body>
</html>
helloServlet.java:
@WebServlet("/hello")
public class helloServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 接收參數String username = req.getParameter("username");// 做出響應resp.getWriter().write("hello" + username);}
}