Ajax的初步學習

一、什么是 Ajax?

Ajax (Asynchronous JavaScript and XML) 是一種無需重新加載整個網頁的情況下,能夠更新部分網頁的技術。通過在后臺與服務器進行少量數據交換,Ajax 可以使網頁實現異步更新。

主要特性:

  • 異步性 (Asynchronous):?可以在不阻塞用戶界面的情況下與服務器進行通信。

  • 局部更新 (Partial Updates):?只更新網頁的一部分,而不是整個頁面,提高了用戶體驗。

  • 基于標準:?Ajax 不是一種新技術,而是幾種現有技術的組合,包括JavaScript, XML, HTML, CSS。

二、Ajax 的核心對象:XMLHttpRequest

XMLHttpRequest?(XHR) 對象是 Ajax 的核心。它允許瀏覽器在后臺與服務器進行通信。

三、基本語法和步驟 (XMLHttpRequest)

1.創建 XMLHttpRequest 對象:

let xhr;if (window.XMLHttpRequest) {  // 現代瀏覽器xhr = new XMLHttpRequest();
} else {  // IE6, IE5xhr = new ActiveXObject("Microsoft.XMLHTTP");
}

2.配置請求 (open 方法):

xhr.open(method, url, async, username, password);
  • method: HTTP 請求方法 (GET, POST, PUT, DELETE 等)。通常使用 GET 或 POST。

  • url: 服務器端腳本的 URL。

  • async: (可選) 布爾值,指示請求是否異步執行。 默認為?true(異步)。

  • username: (可選) 用于身份驗證的用戶名。

  • password: (可選) 用于身份驗證的密碼。

xhr.open('GET', 'data.txt', true); // 異步 GET 請求
xhr.open('POST', 'submit.php', true); // 異步 POST 請求

3.設置請求頭 (可選):

xhr.setRequestHeader(header, value);
  • header: 請求頭的名稱。

  • value: 請求頭的值。

重要:?對于?POST?請求,通常需要設置?Content-Type?請求頭。

示例:

xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); // 常用于 POST
xhr.setRequestHeader('Content-Type', 'application/json'); //  POST 發送 JSON 數據

?4.發送請求 (send 方法):

xhr.send(body); // body 是要發送的數據

body: (可選) 要發送到服務器的數據。

  • 對于?GET?請求,通常?body?為?null。 數據應該附加到 URL 上(例如:url?param1=value1&param2=value2)。

  • 對于?POST?請求,body?可以是:

    • null?(如果沒有數據要發送)

    • URL 編碼的字符串 (例如:param1=value1&param2=value2)

    • JSON 字符串 (需要設置?Content-Type?為?application/json)

    • FormData?對象?

xhr.send();  // GET 請求,沒有數據
xhr.send('name=John&age=30'); // POST 請求,URL 編碼的數據
xhr.send(JSON.stringify({name: "John", age: 30}));  // POST 請求,JSON 數據

5.處理服務器響應:

使用?onreadystatechange?事件監聽?xhr.readyState?的變化。

xhr.onreadystatechange = function() {if (xhr.readyState === 4) {  // 請求完成if (xhr.status === 200) { // 請求成功// 處理響應數據let responseText = xhr.responseText; // 字符串形式的響應數據let responseXML = xhr.responseXML;  // 如果服務器返回 XML,可以作為 XML 文檔訪問// 根據你的需求更新頁面等console.log("Response: " + responseText);} else {// 處理錯誤console.error("請求失敗,狀態碼:" + xhr.status);}}
};
  • xhr.readyState: 表示請求的狀態。

    • 0: 請求未初始化

    • 1: 服務器連接已建立

    • 2: 請求已接收

    • 3: 請求處理中

    • 4: 請求已完成,且響應已就緒

  • xhr.status: HTTP 狀態碼。

    • 200: "OK" (成功)

    • 404: "Not Found" (未找到)

    • 500: "Internal Server Error" (服務器內部錯誤) 等等。

四、示例

?1.完整的 GET 請求例子?

<!DOCTYPE html>
<html>
<head>
<title>簡單的 Ajax GET 請求</title>
</head>
<body><button onclick="loadData()">加載數據</button>
<div id="result"></div><script>
function loadData() {let xhr;if (window.XMLHttpRequest) {xhr = new XMLHttpRequest();} else {xhr = new ActiveXObject("Microsoft.XMLHTTP");}xhr.onreadystatechange = function() {if (xhr.readyState === 4) {if (xhr.status === 200) {document.getElementById("result").innerHTML = xhr.responseText;} else {document.getElementById("result").innerHTML = "Error: " + xhr.status;}}};xhr.open("GET", "data.txt", true);xhr.send();
}
</script></body>
</html>

?創建一個名為data.txt的文件,內容例如:Hello, Ajax! This is data loaded from the server.

?2.完整的 POST 請求例子

<!DOCTYPE html>
<html>
<head>
<title>簡單的 Ajax GET 請求</title>
</head>
<body><button onclick="loadData()">加載數據</button>
<div id="result"></div><script>
function loadData() {let xhr;if (window.XMLHttpRequest) {xhr = new XMLHttpRequest();} else {xhr = new ActiveXObject("Microsoft.XMLHTTP");}xhr.onreadystatechange = function() {if (xhr.readyState === 4) {if (xhr.status === 200) {document.getElementById("result").innerHTML = xhr.responseText;} else {document.getElementById("result").innerHTML = "Error: " + xhr.status;}}};xhr.open("GET", "data.txt", true);xhr.send();
}
</script></body>
</html>

創建一個名為submit.php的PHP文件(或者其他服務器端語言的文件),例如:

<?php$name = $_POST["name"];echo "你好, " . htmlspecialchars($name) . "!"; // 使用 htmlspecialchars 防止 XSS 攻擊
?>

五、使用 FormData 上傳文件

FormData?對象提供了一種表示表單數據的鍵/值對的簡單方式,也可以用于上傳文件。

<!DOCTYPE html>
<html>
<head>
<title>Ajax 上傳文件</title>
</head>
<body><input type="file" id="fileInput"><br><br>
<button onclick="uploadFile()">上傳文件</button>
<div id="result"></div><script>
function uploadFile() {let xhr;if (window.XMLHttpRequest) {xhr = new XMLHttpRequest();} else {xhr = new ActiveXObject("Microsoft.XMLHTTP");}xhr.onreadystatechange = function() {if (xhr.readyState === 4) {if (xhr.status === 200) {document.getElementById("result").innerHTML = xhr.responseText;} else {document.getElementById("result").innerHTML = "Error: " + xhr.status;}}};const fileInput = document.getElementById("fileInput");const file = fileInput.files[0];const formData = new FormData();formData.append("file", file); // 添加文件到 FormDataxhr.open("POST", "upload.php", true);xhr.send(formData); // 不需要手動設置 Content-Type,瀏覽器會自動設置
}
</script></body>
</html>

創建一個名為upload.php的PHP文件(或者其他服務器端語言的文件),例如:

<?php
if (isset($_FILES["file"])) {$file = $_FILES["file"];// 安全起見,你應該進行各種檢查,例如文件類型、大小等// 示例:$allowed_types = array("image/jpeg", "image/png", "application/pdf");if (!in_array($file["type"], $allowed_types)) {echo "Error: Invalid file type.";exit;}$upload_dir = "uploads/"; // 確保該目錄存在,并且有寫入權限$filename = basename($file["name"]); // 獲取文件名$target_path = $upload_dir . $filename;if (move_uploaded_file($file["tmp_name"], $target_path)) {echo "文件上傳成功!文件名: " . htmlspecialchars($filename);} else {echo "文件上傳失敗。";}} else {echo "沒有文件上傳。";
}
?>

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/87700.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/87700.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/87700.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

OOM電商系統訂單緩存泄漏,這是泄漏還是溢出

電商系統訂單緩存泄漏的本質分析一、明確概念區別內存泄漏&#xff08;Memory Leak&#xff09;定義&#xff1a;對象已經不再被使用&#xff0c;但由于被錯誤引用而無法被垃圾回收特點&#xff1a;內存使用量隨時間持續增長&#xff0c;最終可能導致OOM類比&#xff1a;像浴缸…

二進制安全-匯編語言-02-寄存器

二、寄存器 水滴石穿 一個典型的CPU由運算器、控制器、寄存器等器件構成&#xff0c;這些器件靠內部總線相連 內部總線實現CPU內部各個器件之間的聯系&#xff0c;外部總線實現CPU和主板上其他器件的聯系 簡單說&#xff0c;在CPU中&#xff1a; 運算器進行信息處理寄存器進…

Java——初始guava(1)

基于 Google Guava 官方教程的解答 ?? Guava 提供了哪些 JDK 不具備的 API? Guava 擴展了 JDK 的集合框架,提供了多種 JDK 沒有的實用 API: 不可變集合(Immutable Collections) ImmutableList、ImmutableSet、ImmutableMap 等特性:創建后不可修改,線程安全,性能優于…

day53

import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader, TensorDataset import numpy as np from sklearn.preprocessing import MinMaxScaler from sklearn.datasets import load_iris import warnings # 忽略不必要的警…

c++ python 共享內存

一、目的 是為了c來讀取并解碼傳遞給python&#xff0c;Python做測試非常方便&#xff0c;c 和 python之間必須定好協議&#xff0c;整體使用c 來解碼&#xff0c;共享內存傳遞給python 二、主類 主類&#xff0c;串聯decoder&#xff0c;注意decoder并沒有直接在顯存里面穿…

react函數組件的props,ref,state。

react開發我們會把頁面分為一個個組件&#xff0c;組件是獨立而且可復用的重復代碼片段。具體來說組件可以是一個按鈕&#xff0c;一個輸入框。react組件有兩種定義方法&#xff0c;一種是函數組件&#xff0c;一種是類組件。我們這里說一下函數組件之間父子之間如何傳遞props參…

基于ARM+FPGA實現的BISS-C協議解決方案,適用于高精度光柵位移傳感器等

模塊簡介 本資源提供了專為FPGA設計的BISS-C接口協議發送模塊源碼。BISS-C模式作為一種高速、同步的串行通信協議&#xff0c;廣泛應用于高精度光柵位移傳感器的數據傳輸中&#xff0c;特別適用于需要精確位置信息的應用場景。此模式遵循主從架構&#xff0c;其中FPGA作為主控制…

spring中@Transactional注解和事務的實戰理解附代碼

文章目錄 前言一、事務是什么&#xff1f;二、事務的特性2.1隔離性2.2事務的隔離級別 三、Transactional注解Transactional注解簡介基本用法常用屬性配置事務傳播行為事務隔離級別異常處理與回滾性能優化建議 四、 事務不生效的可能原因方法訪問權限非public自調用問題異常被捕…

替代進口SCA7606【智芯微】國產高精度電流傳感器 工業新能源電網專用

SCA7606&#xff08;智芯微&#xff09;產品解析與推廣文案一、產品概述SCA7606 是 智芯微電子&#xff08;ZXMICRO&#xff09; 推出的一款 高精度數字隔離式電流傳感器芯片&#xff0c;采用 霍爾效應數字輸出 技術&#xff0c;專為 工業控制、新能源、智能電網 等領域的電流檢…

Java 與 Vue 全棧開發:“一課一得“ 學習筆記系統實戰

一、項目背景與核心價值 "一課一得" 是一個面向學習者的筆記管理平臺&#xff0c;旨在幫助用戶系統化記錄、整理和回顧學習內容。項目采用前后端分離架構&#xff1a;前端基于 Vue.js 構建交互式界面&#xff0c;后端使用 Java Spring Boot 實現業務邏輯&#xff0c…

百度文心大模型 4.5 開源深度測評:技術架構、部署實戰與生態協同全解析

聲明&#xff1a;本文只做實際測評&#xff0c;并非廣告 1.前言 2025 年 6 月 30 日&#xff0c;百度做出一項重大舉措&#xff0c;將文心大模型 4.5 系列正式開源&#xff0c;并選擇國內領先的開源平臺 GitCode 作為首發平臺。該模型也是百度在2025年3月16日發布的自研的新一…

力扣_鏈表_python版本

一、206. 反轉鏈表代碼&#xff1a; class Solution:def reverseList(self, head):dummy ListNode()cur headwhile cur:last cur.nextcur.next dummy.nextdummy.next curcur lastreturn dummy.next二、92. 反轉鏈表 IIclass Solution:def reverseBetween(self, head: Opt…

[netty5: WebSocketProtocolHandler]-源碼分析

在閱讀這篇文章前&#xff0c;推薦先閱讀&#xff1a;[netty5: MessageToMessageCodec & MessageToMessageEncoder & MessageToMessageDecoder]-源碼分析 WebSocketProtocolHandler WebSocketProtocolHandler 是 WebSocket 處理的基礎抽象類&#xff0c;負責管理 Web…

[2025CVPR]一種新穎的視覺與記憶雙適配器(Visual and Memory Dual Adapter, VMDA)

引言 多模態目標跟蹤&#xff08;Multi-modal Object Tracking&#xff09;旨在通過結合RGB模態與其他輔助模態&#xff08;如熱紅外、深度、事件數據&#xff09;來增強可見光傳感器的感知能力&#xff0c;尤其在復雜場景下顯著提升跟蹤魯棒性。然而&#xff0c;現有方法在頻…

理想汽車6月交付36279輛 第二季度共交付111074輛

理想汽車-W(02015)發布公告&#xff0c;2025年6月&#xff0c;理想汽車交付新車36279輛&#xff0c;第二季度共交付111074輛。截至2025年6月30日&#xff0c;理想汽車歷史累計交付量為133.78萬輛。 在成立十周年之際&#xff0c;理想汽車已連續兩年成為人民幣20萬元以上中高端市…

MobileNets: 高效的卷積神經網絡用于移動視覺應用

摘要 我們提出了一類高效的模型&#xff0c;稱為MobileNets&#xff0c;專門用于移動和嵌入式視覺應用。MobileNets基于一種簡化的架構&#xff0c;利用深度可分離卷積構建輕量級的深度神經網絡。我們引入了兩個簡單的全局超參數&#xff0c;能夠有效地在延遲和準確性之間進行…

SDP服務發現協議:動態查詢設備能力的底層邏輯(面試深度解析)

SDP的底層邏輯揭示了物聯網設備交互的本質——先建立認知,再開展協作。 一、SDP 核心知識點高頻考點解析 1.1 SDP 的定位與作用 考點:SDP 在藍牙協議棧中的位置及核心功能 解析:SDP(Service Discovery Protocol,服務發現協議)位于藍牙協議棧的中間層,依賴 L2CAP 協議傳…

CppCon 2018 學習:GIT, CMAKE, CONAN

提到的&#xff1a; “THE MOST COMMON C TOOLSET” VERSION CONTROL SYSTEM BUILDING PACKAGE MANAGEMENT 這些是 C 項目開發中最核心的工具鏈組成部分。下面我將逐一解釋每部分的作用、常見工具&#xff0c;以及它們如何協同構建現代 C 項目。 1. VERSION CONTROL SYSTEM&am…

使用tensorflow的線性回歸的例子(五)

我們使用Iris數據&#xff0c;Sepal length為y值而Petal width為x值。import matplotlib.pyplot as pltimport numpy as npimport tensorflow as tffrom sklearn import datasetsfrom tensorflow.python.framework import opsops.reset_default_graph()# Load the data# iris.d…

虛幻基礎:動作——蒙太奇

能幫到你的話&#xff0c;就給個贊吧 &#x1f618; 文章目錄 動作——蒙太奇如果動作被打斷&#xff0c;則后續的動畫通知不會執行 動作——蒙太奇 如果動作被打斷&#xff0c;則后續的動畫通知不會執行