簡體   English   中英

jQuery.post() 發送電子郵件但不會在沒有服務器刷新的情況下到達 .done()/.fail()/.always()

[英]jQuery.post() send email but doesn't gets to .done()/.fail()/.always() without server refresh

我試圖基本上只是將表單信息發送到電子郵件而無需刷新頁面,我一路走到了這一步。 這里的問題是,即使它正確發送了電子郵件,它也不會清除表單,因為 $.post() 永遠不會到達 .done() 或 .fail() 或 .always()。 盡管我注意到當我更改代碼並保存它時使用 nodemon 時,它會刷新服務器,然后它會到達 .fail() 和 .always(),但永遠不會到達 .done()。

你們知道我應該怎么做才能使 $.post() 正確完成/失敗/總是嗎?

代碼如下所示:

HTML

<form class="trial-form" action="/trial-submission" method="post">
      <input id="company" type="text" name="company" placeholder="Company" />
      <input id="person" type="text" name="person" placeholder="Contact person" />
      <input id="phone" type="tel" name="telephone" placeholder="Phone" />
      <input id="email" type="email" name="mailAddress" placeholder="E-mail" />
      <input id="note" type="text" name="note" placeholder="Note" />
      <button class="blue-button" id="submit-trial" type="button">send</button>
</form>

JavaScript

$(document).ready(function(){
  $("#submit-trial").click(function(event){
    let cmpn = $("#company").val();
    let eml = $("#email").val();
    let phn = $("#phone").val();
    let nt = $("#note").val();
    let prsn = $("#person").val();
    $.post("/trial-submission", {
      company: cmpn,
      person: prsn,
      phone: phn,
      email: eml,
      note: nt
    })
    .done(function(){
      $("#company").val("");
      $("#email").val("");
      $("#phone").val("");
      $("#note").val("");
      $("#person").val("");
      alert("success");
    })
    .fail(function(){
      alert("error");
    })
    .always(function(){
      alert("finished");
    });
  });
});

節點的東西在這里

app.post("/trial-submission", function(req, res){
  const data = req.body;

  let transporter = nodemailer.createTransport({
       service: "mail",
       auth: {
         user: "send@mail.com",
         pass: "password"
       }
  });

  let mailOptions = {
    from:'send@mail.com',
    to:'receive@mail.com',
    subject: 'testing',
    html:`
      Company: ${data.company}<br>
      Contact person: ${data.person}<br>
      Phone: ${data.phone}<br>
      E-mail: ${data.email}<br>
      Note: ${data.note}
    `
  };

  transporter.sendMail(mailOptions, function(err, data){
    if(err){
      console.log('Error Occurs', err);
    } else {
      console.log('Email Sent!');
    }
  });
});

你需要在你的 sendMail 調用中發送一個響應,否則你的瀏覽器永遠不會收到任何東西。 嘗試這個:

transporter.sendMail(mailOptions, function(err, data){
    if(err){
      console.log('Error Occurs', err);
      res.sendStatus(400);
    } else {
      console.log('Email Sent!');
      res.sendStatus(204);
    }
  });

400 是一個簡單的“錯誤請求”,而 204 是“成功/無內容”。 您可以進一步修改這些,但現在客戶端將收到響應,因此您可以繼續。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM