首页 > 解决方案 > 如果服务器不读取内容而是发送响应,则 XMLHttpRequest 发布文件失败(即使使用代码 200)

问题描述

我正在使用以下代码将文件从表单发送到服务器:

const request = new XMLHttpRequest();
const formElement = document.getElementById('form');

request.upload.addEventListener("progress", (e) => {
    console.log("progress: " + e.loaded + "/" + e.total);
});
// request load handler (transfer complete)
request.addEventListener("load", function (e) {
    console.log(e);
});

request.addEventListener("readystatechange", function (e) {
    console.log(e);
});

// request error handler
request.addEventListener("error", function (e) {
        console.log(e, request)
});
request.open("post", formElement.action);
request.responseType = "json";
request.send(new FormData(formElement));

在某些情况下,服务器可能会在读取文件内容之前做出响应,我想获得该响应并在客户端处理它。

但似乎我只触发了一个错误事件(响应状态为 0,json 类型的空状态文本),以及 2 个 readystatechange 事件,readystate 1 和 readystate 4(相同的空响应)。如果服务器只是返回响应而不读取内容。

在浏览器的开发工具中查看 POST 请求时,我也没有看到任何响应(F12-> 网络选项卡-> 响应)

使用 curl ( curl -i -X POST -H "Content-Type: multipart/form-data" -F "data=blabla" localhost:5000/upload) 我可以发布并获得预期的响应,但不能使用 XMLHttpRequest。

关于我做错了什么的任何想法?

标签: javascriptformspostxmlhttprequest

解决方案


推荐阅读