Javascript AJAX请求正文为空(无jQuery)

Javascript AJAX请求正文为空(无jQuery),javascript,html,ajax,json,node.js,Javascript,Html,Ajax,Json,Node.js,我试图在不使用jQuery的情况下解决这个问题,以便更好地了解事物的工作原理 我正在向带有JSON对象的节点服务器发送一个AJAX请求。服务器可以接收请求并作出响应,但请求正文始终为空。我曾尝试将请求头设置为“application/json”,但出于某种原因,这会更改表单提交,将参数发布到URL,而不是使用Javascript函数。如果有人能告诉我为什么会发生这种情况,我将不胜感激 表格 <form onsubmit="sendEmail(); return false;">

我试图在不使用jQuery的情况下解决这个问题,以便更好地了解事物的工作原理

我正在向带有JSON对象的节点服务器发送一个AJAX请求。服务器可以接收请求并作出响应,但请求正文始终为空。我曾尝试将请求头设置为“application/json”,但出于某种原因,这会更改表单提交,将参数发布到URL,而不是使用Javascript函数。如果有人能告诉我为什么会发生这种情况,我将不胜感激

表格

<form onsubmit="sendEmail(); return false;">
  <input type="text" name="fromEmail">
  <input type="text" name="subject">
  <textarea name="message" rows="14"></textarea>
  <input type="submit" value="SEND">
</form>
节点JS路由

var express = require('express');
var bodyParser = require('body-parser');
var app = express();

// set body parser
app.use(bodyParser.json());

// Process email form
app.post('/message', function(req,res) {
  console.log('Request received by email path.');  
  console.log(req.body);
  res.send('{"success": true}')
  console.log('Response sent.')
});

如果试图发送json响应,则需要将响应的内容类型设置为json

 res.setHeader('Content-Type', 'application/json');
您可以尝试以下方法:

httpRequest.open('POST','/message', true);
httpRequest.setRequestHeader("Content-Type","application/json");
httpRequest.send(emailContent);
参考:
我想我理解了您的问题,您需要的是在不回发邮件的情况下调用函数sendmail()。好吧,为此,您需要一个常规的html按钮,而不是表单提交。表单用于执行对特定url的服务器请求并生成另一个回发

您有两个选择:

1) 使用按钮和ajax请求(XMLHttpRequest)执行客户端调用:


打开浏览器上的开发者工具,检查是否有任何控制台错误,并检查网络选项卡上是否发送了请求。我想这是我的问题。表单是通过URL编码提交的,未使用sendEmail()函数。这与设置内容类型一起修复了它。
httpRequest.open('POST','/message', true);
httpRequest.setRequestHeader("Content-Type","application/json");
httpRequest.send(emailContent);
<input type="text" name="fromEmail">
<input type="text" name="subject">
<textarea name="message" rows="14"></textarea>
<input type="submit" value="SEND">
<button type="button" onclick="sendEmail()">Send</button>
<form action="/message" method="post">
  <input type="text" name="fromEmail">
  <input type="text" name="subject">
  <textarea name="message" rows="14"></textarea>
  <input type="submit" value="SEND">
</form>
fromEmail = req["fromEmail"]