URL参数中携带中文?分享 1 段优质 JS 代码片段!

本内容首发于工粽号:程序员大澈,每日分享一段优质代码片段,欢迎关注和投稿!

大家好,我是大澈!

本文约 800+ 字,整篇阅读约需 1 分钟。

今天分享一段优质 JS 代码片段,在发送 ajax 请求时确保中文参数值被正确解析。

老规矩,先阅读代码片段并思考,再看代码解析再思考,最后评论区留下你的见解!

const params = new URLSearchParams();
params.append('name', encodeURIComponent('张三'));

// 使用 Fetch API 发送 POST 请求
fetch('https://example.com/api', {
    method: 'POST',
    body: params,
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
    }
})

分享原因

这段代码展示了如何使用 URLSearchParams 对象来构建 URL 编码的查询字符串,同时使用 encodeURIComponent 函数来确保参数值中的特殊字符被正确编码。

如果数据是以 JSON 格式传输,那么中文字符不需要额外的编码和解码步骤,因为 JSON 已经包含了对 Unicode 字符的支持。

但如果不是 JSON 格式传输,中文字符就必须用 encodeURIComponent 函数做编码处理,然后在服务端用 decodeURIComponent 做解码处理。

否则,就会出现乱码现象,无法获取正确的中文值。

代码解析

1. const params = new URLSearchParams();

URLSearchParams 主要用于处理 URL 中的查询字符串部分。

它提供了一系列方法来方便地操作查询参数。

一般我都会把 URLSearchParams 与 FormData 一起学习:

FormData 通常用于表单数据的提交,特别是在进行 XMLHttpRequest 或 fetch 请求时。

URLSearchParams 通常在发送数据时,Content-Type 默认为 application/x-www-form-urlencoded 。

FormData 在发送数据时,Content-Type 会根据数据的内容自动设置。

如果包含文件,通常为 multipart/form-data ;如果只是普通的表单字段数据,可能是 application/x-www-form-urlencoded 。

2. params.append('name', encodeURIComponent('张三'));

params.append 方法用于向 URLSearchParams 对象中添加一个键值对。

name 是参数的键。

encodeURIComponent('张三') 是参数的值。

encodeURIComponent 函数用于对 URI 组件(例如查询字符串中的参数值)进行编码,将一些特殊字符转换为可在 URI 中安全传输的形式。

它会对以下字符进行编码:; 、/ 、? 、: 、@ 、& 、= 、+ 、$ 、, 、# 以及所有非 ASCII 字符。

decodeURIComponent 函数则执行相反的操作,将经过 encodeURIComponent 编码的字符串还原为原始的字符串。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
生成文件导入导出的前端页面代码可以使用以下代码片段作为参考: ```javascript // 导入文件请求 const importFile = (file, token) => { return axios.post('/api/import', file, { headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'multipart/form-data' } }) } // 导出文件请求 const exportFile = (params, token) => { return axios.get('/api/export', { params: params, headers: { 'Authorization': `Bearer ${token}` }, responseType: 'blob' }) } // 文件上传组件 <template> <div> <input type="file" ref="fileInput" @change="importFile"> </div> </template> <script> import axios from 'axios' export default { methods: { importFile() { const file = this.$refs.fileInput.files[0] const token = 'your-token-here' importFile(file, token) .then(response => { // 处理导入结果 }) .catch(error => { // 处理导入错误 }) } } } </script> // 文件导出组件 <template> <div> <button @click="exportFile">导出文件</button> </div> </template> <script> import axios from 'axios' export default { methods: { exportFile() { const params = { // 导出文件的参数 } const token = 'your-token-here' exportFile(params, token) .then(response => { const blob = new Blob([response.data]) const filename = `${params.filename}.${params.format}` const url = window.URL.createObjectURL(blob) const link = document.createElement('a') link.href = url link.download = filename link.click() window.URL.revokeObjectURL(url) }) .catch(error => { // 处理导出错误 }) } } } </script> ``` 在这里,我们使用了 Axios 库来发送导入和导出文件的请求。在导入请求,我们使用了 `multipart/form-data` 类型的请求头,并将 token 放在了 `Authorization` 请求头。在导出请求,我们使用了 `blob` 类型的响应类型,并且同样将 token 放在了 `Authorization` 请求头。 在前端页面,我们分别创建了一个文件上传组件和一个文件导出组件。在上传组件,我们监听了文件选择框的 `change` 事件,并在选择文件后调用了 `importFile` 方法来发送导入请求。在导出组件,我们创建了一个按钮,并在点击按钮时调用了 `exportFile` 方法来发送导出请求。在导出请求的成功回调,我们使用了 `Blob` 和 `URL.createObjectURL` 方法来创建一个下载链接,并自动下载导出的文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员大澈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值