如何在 jquery 中读取 post 请求的响应?

Posted

技术标签:

【中文标题】如何在 jquery 中读取 post 请求的响应?【英文标题】:How read response from a post request in jquery? 【发布时间】:2019-01-23 23:21:15 【问题描述】:

我在 node.js 中编写了一个向我的客户端发送邮件的方法,如下所示:-

app.post('/sendemail',(req, res) => 
  const output = `
    <p>You have a new contact request</p>
    <h3>Contact Details</h3>
    <ul>  ;
      <li>Name: $req.body.name</li>
      <li>Email: $req.body.email</li>
      <li>Phone: $req.body.phone</li>
    </ul>
    <h3>Message</h3>
    <p>$req.body.message</p>
  `;

  // create reusable transporter object using the default SMTP transport
  let transporter = nodemailer.createTransport(service: 'gmail ',

auth: 
user: 'atul.11192@gmail.com',
pass: 'xxxxxxx'
,
    tls:
      rejectUnauthorized:false

  );

  // setup email data with unicode symbols
  let mailOptions = 
      from: '"Enquiry from datadock" <atul.11192@gmail.com>', // sender address
      to: 'atul.11192@gmail.com', // list of receivers
      subject: 'Datadock Enquiry ', // Subject line
      text: 'Hello world?', // plain text body
      html: output // html body
  ;

  // send mail with defined transport object
  transporter.sendMail(mailOptions, (error, info) => 
      if (error) 
          res.send('error');
      
        res.redirect('home.ejs',message:"message sent");
  );
  );

现在我想编写一个 jquery 函数来读取我从这个方法发送的响应并显示一个模式,我该如何编写这段代码?由于路线很多,我必须使用 j 查询,因为无法使用 javascript

【问题讨论】:

【参考方案1】:

因为您要重定向到新路由器,所以您需要在会话中设置要发送到前端的数据。但是,您可以通过向同一路由器发送响应来避免这种情况。要实现这一点:

jQuery('button').on('click', function(event) 
    event.preventDefault();
    jQuery.ajax(
        url: '/sendemail',
        dataType: 'json',
        success: function(data) 
            alert(data.message);
            jQuery('.yourModal').text(data.message).show();
            /*setTimeout(function() 
            //window.location.href = data.yourRedirectUrl;
            , 1000);*/
        
    );
);

然后你需要替换以下内容:

res.redirect('home.ejs',message:"message sent")

有了这个:

res.end(JSON.stringify(message:"message sent", yourRedirectUrl: '/home');

如果还需要重定向,可以取消注释我在ajax脚本中添加的setTimeout函数。

编辑:或者,您可以将重定向设置为具有哈希

res.redirect('home#mailsent',message:"message sent")

并将以下内容放在 home.ejs 上:

jQuery(document).on(‘load’, function()
    if(window.location.hash == ‘mailsent’) 
        // Do stuff with your modal here
    
);

【讨论】:

我需要让它成为一个按钮点击事件,否则它会在没有点击按钮事件的情况下单独工作? 我已经编辑了我的答案。对于第一个解决方案,是的。对于添加哈希的替代解决方案,不。我建议亲自使用替代方案,只需在要将用户重定向到的 url 末尾添加一个哈希。这样,当他们使用该哈希登陆主页时,您就可以显示您的模式。

以上是关于如何在 jquery 中读取 post 请求的响应?的主要内容,如果未能解决你的问题,请参考以下文章

将响应数组格式化为 POST 请求 - jQuery

如何在 Postman 上读取 Post 请求的内容?

在 NodeJs 中呈现 jquery POST 请求的响应

jQuery中jsonp响应的POST请求

jQuery AJAX GET/POST 请求在错误处理程序中返回 404,但从服务器发送了有效响应

带有json响应的jQuery ajax请求,如何?