在JavaScript中向服务器(比如使用Node.js的Express框架)传递中文参数时,如果在controller(或称为路由处理函数)中获取到的参数出现乱码,这通常是因为字符编码的问题。最常见的是因为请求没有正确地设置`Content-Type`头,或者服务器没有正确处理这个头。
以下是一些可能的解决方法:
### 1. 确保前端发送请求时设置了正确的`Content-Type`
对于POST请求,确保发送请求时设置了`Content-Type: application/x-www-form-urlencoded; charset=UTF-8`(如果是表单数据)或`Content-Type: application/json; charset=UTF-8`(如果是JSON数据)。
#### 示例(使用`fetch`发送JSON数据):
fetch('http://yourserver.com/api/data', {
method: 'POST',
headers: {
'Content-Type': 'application/json; charset=UTF-8',
},
body: JSON.stringify({ name: '张三', age: 30 }),
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
### 2. 在服务器端正确解析请求体
对于Express框架,确保你已经安装了`body-parser`中间件(或在Express 4.16+版本中使用内置的`express.json()`和`express.urlencoded()`中间件),并且正确地设置了它们。
#### 示例(Express 4.16+):
const express = require('express');
const app = express();
// 用于解析application/json
app.use(express.json());
// 用于解析application/x-www-form-urlencoded
app.use(express.urlencoded({ extended: true }));
app.post('/api/data', (req, res) => {
console.log(req.body.name); // 应该能正确打印中文
res.send('Received');
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
### 3. 检查数据库的字符集设置
如果你将数据存储到数据库中,确保数据库的字符集(如MySQL的`utf8mb4`)和表的字符集设置能够支持中文。
### 4. 检查HTML页面的字符集
如果你是在HTML表单中提交数据,确保HTML页面的``已经设置,这样浏览器就会以UTF-8编码发送表单数据。
通过以上步骤,你应该能够解决JavaScript向服务器传递中文参数时出现的乱码问题。如果问题仍然存在,可能需要检查服务器或中间件的其他配置。