Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有人能解释为什么我的程序没有显示正确的警报吗?_Javascript_Node.js_Json_Fetch_Client Server - Fatal编程技术网

Javascript 有人能解释为什么我的程序没有显示正确的警报吗?

Javascript 有人能解释为什么我的程序没有显示正确的警报吗?,javascript,node.js,json,fetch,client-server,Javascript,Node.js,Json,Fetch,Client Server,我编写了这个函数,它允许用户向服务器添加图像。然而,我的警报似乎不起作用。我尝试将警报消息记录为console.log,而不是将其作为警报,但这似乎也不起作用。任何提示都很好。 client.js async function picsub(event){ event.preventDefault(); var image=document.getElementById('imageFile'); const formData = new FormData();;

我编写了这个函数,它允许用户向服务器添加图像。然而,我的警报似乎不起作用。我尝试将警报消息记录为console.log,而不是将其作为警报,但这似乎也不起作用。任何提示都很好。 client.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);
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);
});

server.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);
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);
});


在这里尝试不使用异步。另外,请尝试函数中的一些内容,尤其是在
警报()附近。这样,您就知道它甚至会进入express中的
警报()

,您只设置了状态,但没有从服务器发送任何消息。因此,将执行fetch中的
然后
捕获

然后当您收到服务器的响应时将执行

当客户端和服务器之间的连接失败时,将执行catch

在您的情况下,您并没有从服务器发送任何响应,
fetch
函数将等待响应,直到超时。但是,您没有设置任何超时。这意味着没有来自服务器的响应或任何失败的连接。因此,fetch中的
then
catch
将不会执行。除非您关闭了服务器。但是,浏览器将帮助您设置默认超时,例如Chrome。它使用300秒作为超时时间

因此,您需要使用
res.end(“success”)
发送消息,如下所示

app.get('/pics',函数(req,res){
const pic=请求主体;
控制台日志(pic);
图片。推送(图片);
决议状态(201)。结束(“成功”);
})
在client.js中,您应该完成fetch函数中的括号

fetch('http://127.0.0.1:8090/pics然后((回应)=>{
返回response.text();
})。然后((响应)=>{
如果(响应=='success'){
警报(“添加pic”);
}否则{
警报(“发生错误”);
}
}).catch((e)=>{
警报(“发生错误”);
})//=>这里

const
在JavaScript中是一个保留字,尝试将其更改为JavaScripts支持的变量名这是我将常量类型分配给变量pic的原因,是不正确的,我的意思是在
picsub
@sal中我已经更改了它们,但仍然不起作用