Fetch API 不适用于 Microsoft Edge 中的非英文字符

问题描述 投票:0回答:1

我正在尝试使用 JavaScript Fetch API 向 API 发送 POST 请求。在 Chrome、FF、IE 11(使用 polyfill)中一切正常,但在 Microsoft Edge 中不起作用(控制台和网络选项卡为空)。仅当我发送拉丁文本作为参数时它才有效。例如,当我运行此代码时:

fetch(API_URL, {
  method: 'POST',
  body: JSON.stringify({ str: '테스트'})
})
.then((data) => console.log(data))
.catch((err) => {
  console.error('fetch error:', error);
  throw error;
});

它没有做任何事情,但是当我将“str”的值更改为“一些拉丁文本”时,它工作正常(向 API 发送正确的请求并接收响应)。

Microsoft 网站上的问题:请求正文中包含 unicode 字符的 fetch() 失败并出现 TypeMismatchError

javascript fetch-api microsoft-edge
1个回答
2
投票

在内部,JavaScript 字符串被编码为 UTF-16。看起来 Edge 默认情况下不会转换为另一种编码,如果它认为您的身体与配置的(或假设的?)

TypeMismatchError
不兼容,则会抛出
Content-type

解决此问题的方法是转义负载的 JSON 表示中的所有非 ASCII 字符:

function encodePayload(payload) {
    return JSON.stringify(payload).
        replace(/[\u007F-\uFFFF]/g, function (c) {
            return "\\u" + ("0000" + c.charCodeAt(0).toString(16)).substr(-4);
        });
}

fetch(API_URL, {
    method: 'POST',
    body: encodePayload({ str: '테스트'})
})
© www.soinside.com 2019 - 2024. All rights reserved.