const fetchExchangeRate = async () => {
try {
const boundary =
"WebKitFormBoundary" + Math.random().toString(36).substring(2);
const formData =
`--${boundary}\r\n` +
`Content-Disposition: form-data; name="path"\r\n\r\n` +
`/api/exchange\r\n` +
`--${boundary}\r\n` +
`Content-Disposition: form-data; name="params"\r\n\r\n` +
`${JSON.stringify({
from: fromCurrency,
to: toCurrency,
money: parseFloat(amount) || 1,
})}\r\n` +
`--${boundary}--\r\n`;
const response = await Taro.request({
url: `https://xxx.com`,
method: "POST",
header: {
"content-type": `multipart/form-data; boundary=${boundary}`,
},
data: formData,
});
// 处理响应...
if (response.data.code === 200 && response.data.data) {
const rate = response.data.data.exchange;
setExchangeRate(rate);
convertCurrency(amount, rate);
} else {
throw new Error("API 返回错误");
}
} catch (error) {
console.error("获取汇率失败:", error);
Taro.showToast({
title: "获取汇率失败,请稍后再试",
icon: "none",
});
}
};
这个修改做了以下几点改变:
- 我们手动创建了一个multipart/form-data格式的字符串。
- 使用随机生成的boundary来分隔不同的表单字段。
- 将content-type头部设置为multipart/form-data,并包含了boundary。
- 直接发送构造好的formData字符串。
这种方法应该能够模拟您描述的请求格式。请注意,这种方法可能不够优雅,但在没有FormData对象的环境中,这是一种可行的解决方案。