【发布时间】:2015-11-12 03:55:29
【问题描述】:
我试图在不使用 jQuery 的情况下解决这个问题,以便更好地了解事情的工作原理。
我正在使用 JSON 对象向节点服务器发送 AJAX 请求。服务器可以接收请求并响应,但请求正文始终为空。我尝试将请求标头设置为“application/json”,但由于某种原因,这会将表单提交更改为将参数 POST 到 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>
电子邮件功能
function sendEmail() {
var emailContent = JSON.stringify(
{
email: $('input[name=fromEmail]').val(),
subject: $('input[name=subject]').val(),
message: $('textarea[name=message]').val()
}
);
var httpRequest;
if (window.XMLHttpRequest) { // Mozilla, Safari, IE7+ ...
httpRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE 6 and older
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
httpRequest.open('POST','/message', true);
httpRequest.onreadystatechange = function() {
if (httpRequest.readyState == 4 && httpRequest.status == 200) {
alert(httpRequest.responseText);
}
}
httpRequest.send(emailContent);
}
节点 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.')
});
【问题讨论】:
-
在浏览器上打开开发者工具,检查是否有任何控制台错误,如果正在发送请求,请检查网络选项卡。
标签: javascript html ajax json node.js