【问题标题】:How to handle ajax post response sent form express server?如何处理从快递服务器发送的ajax post响应?
【发布时间】:2019-05-02 03:51:53
【问题描述】:

我是初学者,所以我不知道我是否清楚我的问题。 我的问题是我从快递服务器发送的响应显示在页面中,但我无法在客户端使用 jquery 处理它。

服务器端:

router.post("/", [
    //check inputs using expres-validator
    ],
    (req, res)=>{
        //handle validation results
        var errors = validationResult(req);
         if (!errors.isEmpty()) {
            //filter errors
            res.status(400).send([usernameErr, emailErr, passwordErr]);
        }else {
            res.sendStatus(200);
        };
});

客户端:

$(".form-div form input[type='submit']").submit(function(e){
        e.preventDefault();
        if($(this).parent().parent().attr("id") == "signup-form-container"){
            $.post('/signup', $('#signup-form-container form').serialize())
            .done(data=>{
                alert(data)
                console.log(data);
            })
            .fail((err, textStatus)=>{
                alert(err)
                console.log(err)
            });

        };
    });

我正在将我的注册文件(具有上述路径)导出到我的主文件。

app.use("/signup", require(`${__dirname}/routes/signup.js`));

【问题讨论】:

  • .done(data=>{ alert(data) console.log(data); }) 是您获得响应并处理它的部分

标签: javascript jquery node.js ajax express


【解决方案1】:

所以如果你检查你的选择器:

$(".form-div form input[type='submit']") // this is selecting the input element

然而,提交事件只有在表单元素内部时才会触发, 因此将提交事件附加到按钮或输入将不起作用。

这是参考:https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement/submit_event

所以,要解决这个问题,试试这个:

/*
 Here you are selecting the form, so submitting here will work. 
*/
$(".form-div form").submit(function(e){
        e.preventDefault();
        if($(this).parent().parent().attr("id") == "signup-form-container"){
            $.post('/signup', $('#signup-form-container form').serialize())
            .done(data=>{
                alert(data)
                console.log(data);
            })
            .fail((err, textStatus)=>{
                alert(err)
                console.log(err)
            });

        };
    });

这就是 click 起作用的原因,因为当您单击元素时会触发。我希望这是有道理的。

【讨论】:

  • 它不起作用,它继续将响应记录到页面而不是控制台。
  • 你能显示你的'/signup/路线吗?我只看到 '/' 的路线,因为在您的 jquery 中,您正在将 http 发布到 '/signup/' 路线。谢谢
  • 我编辑了这个问题。 //signup 路由。
  • 是的,你能告诉我你的 html 吗?这样我就可以更好地了解您的表单的结构。所以我对 jquery 不是很熟悉,但是您只是选择输入元素并将提交事件附加到它吗? .如果可能的话,在在线编辑器中显示代码将有很大帮助。我还可以通过 fetch api 向您展示一种更好、更简单的方法。
  • 我编辑了帖子,让我知道这是否有意义,并按照我说的进行尝试。
猜你喜欢
  • 2018-12-22
  • 1970-01-01
  • 1970-01-01
  • 2011-11-04
  • 2014-02-16
  • 1970-01-01
  • 2014-01-13
  • 2012-09-12
  • 1970-01-01
相关资源
最近更新 更多