【发布时间】:2019-05-16 22:41:18
【问题描述】:
我有一个 React 应用程序,其中包含一个将数据发布到服务器方法的 JavaScript 方法。这种方法在阳光下的每个浏览器中都可以正常工作……除了 IE11(我知道这令人震惊)。不幸的是,这个项目需要 IE11 支持。
IIS 日志显示 400(错误请求)HTTP 状态代码。
由于 fetch() 与 IE11 不兼容,我选择不使用它,并且我宁愿避免使用外部库(如 axios 或 jQuery)为单个浏览器提供单一方法。
我尝试了一些 Content-Type 标头值(application/json 和 x-url-form-encoded),还尝试了可能相关或不相关的各种其他标头(Pragma、CORS - 即使它不是交叉的 -来源,Cache-Control 等)。
handleSubmit(event) {
const booking = {
'key1': 'value1',
'key2': 'value2',
'key3': 'value3',
};
const xhr = new XMLHttpRequest();
const url = "api/Booking/AddBooking";
xhr.open("POST", url);
xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
xhr.send(JSON.stringify(booking));
xhr.onreadystatechange = () => {
if (xhr.readyState === 4 && xhr.status === 200) {
var response = JSON.parse(xhr.responseText);
this.setState({
bookingResponse: response,
showModal: true
});
}
}
event.preventDefault();
}
我知道外部库可以与 IE11 一起使用,因此必须有办法使用 vanilla JavaScript 解决这个问题,我只是找不到它是什么。有什么想法吗?
【问题讨论】:
-
所以在网络选项卡中是否提供了任何其他信息?
-
您在 Active Directory(域控制器)企业中吗?如果是这样,则可能存在强制 IE11 进入兼容性视图的组策略。
-
@epascarello just:
/api/Booking/AddBooking HTTPS POST 400 224 B 31 ms XMLHttpRequest 0 0 0 31 0 0@RandyCasburn 网络使用 AD,但此 URL 没有兼容性设置。 -
我在调试中检查了服务器方法,在使用 IE11 时它不接收/接受请求的正文,因此它似乎与发送数据的格式有关。我尝试了对数据本身(例如数组而不是对象)和 Content-Type 标头的进一步变体,但无济于事。目前我正在寻找使用 Fidldler 的 Chrome 和 IE 之间的请求正文是否有任何差异,但到目前为止没有任何运气。
标签: javascript reactjs xmlhttprequest internet-explorer-11 http-status-code-400