【问题标题】:XmlHttpRequest POST method fails with status code 400 in IE11XmlHttpRequest POST 方法在 IE11 中失败,状态码为 400
【发布时间】: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


【解决方案1】:

问题与某些变量值有关。我使用的是 ES6 字符串插值(即反引号),这在 IE 中不受支持。

【讨论】:

    猜你喜欢
    • 2019-04-11
    • 2017-06-02
    • 2019-09-29
    • 2022-06-21
    • 2021-04-07
    • 1970-01-01
    • 2021-02-03
    • 2021-11-09
    • 1970-01-01
    相关资源
    最近更新 更多