这让我难住了。我正在做以下工作:
const testFetch = () => {
console.log("testFetch");
fetch(`${baseurl}/${requrl}`, {
method: "POST",
body: JSON.stringify({ foo: "bar" }),
headers: {
"Content-Type": "application/json; charset=utf-8",
Accept: "*/*",
"Cache-Control": "no-cache",
},
})
.then((response) => {
console.log("response", response);
})
.catch((err) => {
console.log("error", err);
});
};
服务器将为此调用返回 401 Unauthorized。这个承诺在 iOS 中永远不会实现(在 Android 中却会实现)。 IE。我从来没有得到响应或错误日志记录。在我看来,这里变得很奇怪:
我正在使用 Expo 15.0.7 和 React Native 0.74.2。我尝试过 Axios、Apisauce 和 XMLHttpRequest,但没有成功。通过邮递员我得到了完美的答复。这与cors无关。这种情况发生在 iOS 模拟器和 iOS 设备上的 Expo Go 上。 Android 设备对于此代码没有任何问题。我花了超过 24 小时进行调试,现在我转向你了。感谢您的宝贵时间。
我找到了这个错误的原因。服务器 (IIS) 启用了基本身份验证和摘要身份验证,并在响应中包含 www-authenticate 标头,因为代码返回 401。要认识到的重要一点是,如果发生这种情况,fetch/axios/apisauce/etc 将挂起iOS 并没有解决。我只能猜测为什么。可能是因为它在到达 React Native 代码之前被拦截,并且其他一些逻辑尝试处理身份验证。