如何从jquery中的发布请求读取响应?

时间:2018-08-16 23:22:13

标签: jquery json node.js

我编写了一种方法,可以像这样在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 个答案:

答案 0 :(得分: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
    }
});