從提交表單的角度來看,默認(rèn)情況下,表單數(shù)據(jù)會(huì)被瀏覽器使用 URL 編碼格式進(jìn)行提交。這意味著,在可讀性和易于處理性之間需要做出妥協(xié)。然而,隨著 Ajax 技術(shù)的發(fā)展,提交格式不再局限于 URL 編碼格式。其中一種常見的格式就是 JSON。
使用 JSON 格式提交表單數(shù)據(jù)時(shí),需要先將表單數(shù)據(jù)序列化為 JSON 格式,然后將其放入 POST 請(qǐng)求中。這可以通過使用 JavaScript 對(duì)象和數(shù)組的序列化方法 JSON.stringify() 來實(shí)現(xiàn)。例如:
var formData = { username: 'john_doe', password: 'password123' }; var xhr = new XMLHttpRequest(); xhr.open('POST', '/login'); xhr.setRequestHeader('Content-Type', 'application/json'); xhr.send(JSON.stringify(formData));
在上述代碼中,我們創(chuàng)建了一個(gè)包含用戶名和密碼的對(duì)象 formData,在 XMLHttpRequest 對(duì)象中設(shè)置了 POST 請(qǐng)求,并將請(qǐng)求的 Content-Type 設(shè)置為 application/json。最后,通過調(diào)用 JSON.stringify(formData) 方法將表單數(shù)據(jù)序列化為 JSON 字符串,然后將其發(fā)送到服務(wù)器。
接收 JSON 格式的表單數(shù)據(jù)時(shí),服務(wù)器需要將 JSON 字符串解析為 JavaScript 對(duì)象或數(shù)組。這可以通過使用服務(wù)器端的 JSON 解析庫來實(shí)現(xiàn)。例如,在 Node.js 環(huán)境下,可以使用內(nèi)置的 JSON 對(duì)象的 parse() 方法來將 JSON 字符串解析為 JavaScript 對(duì)象。例如:
const http = require('http'); http.createServer((req, res) =>{ if (req.method === 'POST' && req.url === '/login') { let body = ''; req.on('data', chunk =>{ body += chunk.toString(); }); req.on('end', () =>{ const formData = JSON.parse(body); console.log(formData.username); // john_doe console.log(formData.password); // password123 }); } }).listen(3000);
在上述代碼中,我們創(chuàng)建了一個(gè) Node.js 服務(wù)器,并對(duì) POST 請(qǐng)求進(jìn)行了處理。在 req.on('data', ...) 回調(diào)中,我們收集 POST 請(qǐng)求中的數(shù)據(jù),并在 req.on('end', ...) 回調(diào)中將其解析為 JavaScript 對(duì)象。最后,我們可以訪問對(duì)象的屬性,例如 formData.username 和 formData.password。