api.txlSearApi(params, this.data.id, encodeURIComponent(search)).then((res)=>{ console.log(res,'这是筛选的数据'); })为什么使用了解决乱码,拼接在路径上还是乱码呢
时间: 2024-04-02 08:35:04 浏览: 14
在使用 `encodeURIComponent` 函数对参数进行编码后,如果将其直接拼接到 URL 路径后面,可能会导致 URL 路径中的特殊字符被错误地解析,从而出现乱码。解决这个问题的方法是,将编码后的参数作为 URL 查询参数传递,而不是直接拼接到路径中。
示例代码:
```
const url = 'https://example.com/api';
const query = 'param=' + encodeURIComponent('中文');
wx.request({
url: url + '?' + query,
success: (res) => {
console.log(res);
}
});
```
在服务端接收到请求后,可以通过解析 URL 查询参数来获取参数值。在 Node.js 中,可以使用 `url.parse` 函数和 `querystring` 模块来解析 URL 查询参数,例如:
```
const url = require('url');
const querystring = require('querystring');
const urlObj = url.parse(req.url);
const query = querystring.parse(urlObj.query);
const param = query.param;
```
这样就可以避免在微信小程序中进行 HTTP 请求时路径拼接中文出现乱码的问题。
相关问题
Get() { console.log("'--get--'"); this.MyData.timeStamp = GetTime(); this.MyData.nonceStr = GetRandonNum(); const data = Object.keys(this.MyData).map(key => { return encodeURIComponent(key) + '=' + encodeURIComponent(this.MyData[key]); }).join('&'); this.MyKey = GetSign(data); const newData = data + "&sign=" + this.MyKey; Post('https://api.dwith.cn/gateway/parking/list.action', newData) .then(response => { this.Arr = response; }); },
根据你提供的代码,`Get()` 方法似乎是用于从 `https://apiwith.cn/gateway/parking/list.action` 发送 POST 请求获取数据,并将响应数据赋值给 `this.Arr`。
在这个方法中,你还调用了两个自定义的函数 `GetTime()` 和 `GetRandonNum()`,以及函数 `GetSign()` 来生成时间戳、随机数和签名。
根据代码中的描述,我可以给你一个基本的思路来刷新页面并重新获取数据:
1. 在 `data` 属性中定义一个变量,用于控制是否需要刷新页面。
```javascript
data() {
return {
refreshPage: false,
// 其他 data 属性...
};
},
```
2. 在 `Get()` 方法中添加一个判断,如果 `refreshPage` 为 `true`,则执行刷新操作。
```javascript
Get() {
console.log("'--get--'");
this.MyData.timeStamp = GetTime();
this.MyData.nonceStr = GetRandonNum();
const data = Object.keys(this.MyData).map(key => {
return encodeURIComponent(key) + '=' + encodeURIComponent(this.MyData[key]);
}).join('&');
this.MyKey = GetSign(data);
const newData = data + "&sign=" + this.MyKey;
Post('https://api.dwith.cn/gateway/parking/list.action', newData)
.then(response => {
this.Arr = response;
if (this.refreshPage) {
this.refreshPage = false; // 重置刷新标志
this.Get(); // 重新获取数据
}
});
},
```
3. 在你想要刷新页面的地方调用 `this.refreshPage = true;`,例如一个按钮的点击事件。
```javascript
methods: {
refresh() {
this.refreshPage = true;
}
}
```
4. 在模板中绑定按钮的点击事件。
```html
<button @click="refresh">刷新页面</button>
```
这样,当你点击按钮时,`refreshPage` 的值将被设置为 `true`,并触发 `Get()` 方法刷新页面并重新获取数据。请注意,在重新获取数据后,将 `refreshPage` 设置为 `false`,以防止无限循环刷新。
希望这个解决方案能够帮助到你。如果有其他问题,请随时提问。
const data = Object.keys(this.MyData).map(key => { return encodeURIComponent(key) + '=' + encodeURIComponent(this.MyData[key]); }).join('&');
你的代码是将对象 `this.MyData` 中的键值对转换为 URL 参数的形式。`Object.keys()` 方法用于获取对象的所有键名,然后使用 `map()` 方法遍历键名数组,将每个键名和对应的值拼接成 URL 参数的形式,并使用 `join('&')` 方法将它们连接起来。
如果你想在 mpvue 中使用这段代码,可以将它放在一个方法中,然后在需要的地方调用该方法。以下是一个示例:
```vue
<script>
export default {
data() {
return {
MyData: {
key1: 'value1',
key2: 'value2',
key3: 'value3'
}
}
},
methods: {
generateURLParams() {
const data = Object.keys(this.MyData).map(key => {
return encodeURIComponent(key) + '=' + encodeURIComponent(this.MyData[key]);
}).join('&');
return data;
}
}
}
</script>
```
在上述示例中,`MyData` 是一个包含键值对的对象。通过调用 `generateURLParams()` 方法,可以获取该对象转换为 URL 参数的字符串。
你可以根据实际情况修改示例中的数据和方法名。在适当的时候调用 `generateURLParams()` 方法,将获得的 URL 参数应用到你的需求中。