【问题标题】:GET http://localhost:14532/[object%20Object]/ 404 (Not Found) when using await fetch post requests in JQuery在 JQuery 中使用 await fetch post 请求时获取 http://localhost:14532/[object%20Object]/ 404 (Not Found)
【发布时间】:2020-05-19 07:03:14
【问题描述】:

我正在使用 JQuery 向服务器发送异步 POST 请求并获取响应值,并且似乎运行良好。但是,我收到了您在问题标题中看到的错误,我不知道为什么,因为我没有在任何地方执行任何 GET 请求。

客户端代码:

async startGame(username) { 
        await fetch ($.post("/startGame", {username: username}, (data) => {
            data = JSON.parse(data);
            this.idPlayer = data[0];
            this.idGame = data[1]
            console.log("data1:");
            console.log(data) 
        }));

        await fetch ($.post("/lookingForAPlayer", (data) => {
            data = JSON.parse(data);
            console.log("data2:");
            console.log(data)
        }));
    }

服务器端代码(node.js):

app.post('/startGame', function(req, res) {
    dbConnection.getIdPlayer(req.body.username).then(data1 => {
        dbConnection.addGame(data1).then(data2 => {
            res.end(JSON.stringify([data1, data2]));
        });
    });
});

app.post('/lookingForAPlayer', function(req, res) {
    dbConnection.lookingForAPlayer().then(data => {
        res.end(JSON.stringify(data));
    });
});

结果:

有错误:

如您所见,两个请求都是异步发出的,所以它可以满足我的需要,但我认为我遇到的错误不正常。

【问题讨论】:

  • 您正在调用fetch,并使用$.post(...) 作为参数的返回值。您需要使用其中之一(fetch 或$.post

标签: javascript jquery node.js asynchronous async-await


【解决方案1】:

你要么使用fetch,要么使用jQuery POST调用,但不能同时使用。

发生的情况是您正在使用 jQuery 进行 POST 请求,但它都被一个具有默认方法 GET 的 fetch 请求包装,所以这就是它尝试发出 GET 请求的原因。

async startGame(username) { 
    await $.post("/startGame", {username: username}, (data) => {
        data = JSON.parse(data);
        this.idPlayer = data[0];
        this.idGame = data[1]
        console.log("data1:");
        console.log(data) 
    });

    await $.post("/lookingForAPlayer", (data) => {
        data = JSON.parse(data);
        console.log("data2:");
        console.log(data)
    });
}

如果你更喜欢使用fetch,而不是jQuery(我推荐),你可以使用这个

async startGame(username) { 
    await fetch("/startGame", {
        method: 'post',
        body: JSON.stringify({username: username})
    }).then(function(data) {
        data = JSON.parse(data);
        this.idPlayer = data[0];
        this.idGame = data[1]
        console.log("data1:");
        console.log(data)
    });

    await fetch("/lookingForAPlayer", {
        method: 'post',
    }).then(function(data) {
        data = JSON.parse(data);
        console.log("data2:");
        console.log(data)
    });
}

【讨论】:

  • 好的,有道理。我不知道。有人告诉我使用fetch,但使用本机 JavaScript 进行,但显然,它与 JQuery 的工作方式不同。谢谢。现在已经修复了:)
  • @Adrian2895 不客气,如果您被告知这样做,您可能还想检查获取方式。
  • 好吧,我更喜欢使用 JQuery,因为它的代码更清晰、更短。我被告知使用fetch 的原因是因为我用jQuery 代码发布了我之前的问题,但他们的答案是使用本机javascript。我不确定为什么。您是否建议改用fetch?为什么?
  • 我之前的问题是这样的,顺便说一句:stackoverflow.com/questions/61877644/…(如果你想看看)
  • @Adrian2895 是的,我推荐fetch,因为它是内置的,您不需要加载任何额外的库。因此,除非您已经在很多事情上依赖 jQuery,否则我建议您使用内置方式并避免 不必要的 延迟。
猜你喜欢
  • 2021-12-12
  • 2022-01-07
  • 2015-01-04
  • 2021-12-17
  • 1970-01-01
  • 2019-09-10
  • 2023-03-24
  • 2021-09-15
  • 2023-03-05
相关资源
最近更新 更多