Отправка информации о сообщении с помощью XMLHttpRequest или Ajax

#ajax #forms #xmlhttprequest

Вопрос:

Пожалуйста, поделитесь со мной, так как я новичок в веб-программировании и потратил много времени, пытаясь разобраться в этом самостоятельно. Я использую node.js с помощью express и пытаюсь отправить данные от моего клиента на сервер, чтобы отправить электронное письмо со страницы «Свяжитесь со мной».

Моя простая тестовая html-форма выглядит так:

 <form action="email" method="POST" class="contact-form">
  <input type="text" id="name" placeholder="Your Name" value="Test">
  <input type="email" id="email" placeholder="Your Email" value="Bob@bob.com">
  <input type="text" id="subject" placeholder="Subject" value="Subject of Email">
  <textarea cols="30" rows="7" id="message" placeholder="Message" >I was here.</textarea>
  <input type="submit" value="Send Message" class="submit">
</form>
 

Это код для моего сервера, использующего XMLHttpRequest:

 const contactForm = document.querySelector(".contact-form");
let name    = document.getElementById("name");
let email   = document.getElementById("email");
let subject = document.getElementById("subject");
let message = document.getElementById("message");

contactForm.addEventListener("submit", (e) => {
e.preventDefault();

let formData = {
  name: name.value,
  email: email.value,
  subject: subject.value,
  message: message.value
}

let xhr = new XMLHttpRequest();
xhr.open("POST", "/");
xhr.setRequestHeader("content-type", "application/json");
xhr.onload = function() {
console.log(xhr.responseText); //This never runs
if(xhr.responseText == "success") {
  alert("Email sent"); //this never fires
  name.value = "";
  email.value = "";
  subject.value = "";
  message.value = "";
} else {
  alert("Something went wrong!"); //nor does this
}

  console.log(xhr.statusText); //nor does this
  xhr.send(JSON.stringify(formData));
}

});
 

У меня также есть точно такая же вещь, использующая ajax здесь.

 const contactForm = document.querySelector(".contact-form");
let name    = document.getElementById("name");
let email   = document.getElementById("email");
let subject = document.getElementById("subject");
let message = document.getElementById("message");

contactForm.addEventListener("submit", (e) => {
  e.preventDefault();

  let formData = {
    name: name.value,
    email: email.value,
    subject: subject.value,
    message: message.value
  }

  $.ajax({
    type: 'POST',
    url: "/",
    contentType: "application/json; charset=utf-8",
    datatype: 'json',
    data: formData,
    success: function (response) {
        console.log(response);
    },
    error: function(error) {
        console.log("error");
    }
 });

});
 

For both cases, my server side code is this:

 const express = require("express");
const app = express();

const PORT = process.env.PORT || 3000;

//Middleware
app.use(express.static("public"));

app.get("/", function(req, res) {
    //send html file. Do this so that other code can run.
    res.sendFile(__dirname   "/contactform.html");
});

app.post("/", function(req, res) {
     var data = JSON.parse(req.body)
     console.log(data);
  });
  

app.listen(PORT, function(req, res) {
    console.log('Listening on port ${PORT}');
});
 

Моя версия XMLHttpRequest не запускает код загрузки. Версия ajax возвращает 500 внутренних ошибок сервера, и отправленные данные не определены.

Любая помощь будет признательна.