javascript - 谁能解释为什么我的程序没有显示正确的警报?
问题描述
我已经编写了这个函数,它允许用户将图像添加到服务器。但是,我的警报似乎不起作用。我试图 console.log 警报消息,而不是将它们作为警报,但这似乎也不起作用。任何提示都会很棒。 客户端.js
async function picsub(event){
event.preventDefault();
var image=document.getElementById('imageFile');
const formData = new FormData();;
formData.append('image',image.files[0]);
let i={
method:'POST',
body:formData,
}
fetch('http://127.0.0.1:8090/pics', i).then((response) => {
return response.text();
}).then((response) => {
if (response === 'success') {
alert('pic added');
} else {
alert('An error has occurred');
}
}).catch((e) => {
alert('An error has occurred');
form.reset();
}
const form = document.getElementById("form");
form.addEventListener("submit", picsub);
服务器.js
const app = express();
const port = 8090;
let pictures=[];
app.post('/pics', (req, res) => {
const pic = req.body;
console.log(pic);
pictures.push(pic);
res.status(201);
});
解决方案
在您的快递中,您只设置了状态,但您没有从服务器发送任何消息。因此,您的then
or catch
in fetch 将被执行。
then
当您收到服务器的响应时将执行。
catch
当客户端和服务器之间的连接失败时将执行。
在您的情况下,您没有从服务器发送任何响应,fetch
函数将等待响应直到超时。但是,您没有设置任何超时。这意味着服务器没有响应或任何失败的连接。因此,您的then
or catch
in fetch 将不会被执行。除非,您关闭服务器。但是,浏览器会帮助您设置默认超时,例如 Chrome。它使用 300 秒作为超时。
所以,你需要res.end("success")
像下面这样发送消息。
app.get('/pics', function (req, res) {
const pic = req.body;
console.log(pic);
pictures.push(pic);
res.status(201).end("success");
})
在您的 client.js 中,您应该完成 fetch 函数中的括号。
fetch('http://127.0.0.1:8090/pics', i).then((response) => {
return response.text();
}).then((response) => {
if (response === 'success') {
alert('pic added');
} else {
alert('An error has occurred');
}
}).catch((e) => {
alert('An error has occurred');
}) // ===> here
推荐阅读
- javascript - 如何在 Chrome 扩展的 Active Tab 的两个页面上运行后台 JS
- c3.js - 基于 C3js 圆环图数据的条件颜色
- java - 哪个 JAR 用于 JSTL?
- ubuntu - 在训练模型时运行应用程序
- messaging - 基于事件的系统中的消息格式
- php - AWS SQS 错误:SignatureDoesNotMatch HTTP 错误:403
- magento2 - 无法使用 magento 2 REST API 取消订单
- google-analytics - 如何将 Google Analytics 虚拟网页浏览量与事件关联起来
- python - 按特定类属性对列表中的 Python 对象进行排序
- javascript - (JavaScript) 对 JSON 散列进行排序,但不基于散列键