gpt4 book ai didi

javascript - AJAX 请求正文为空(无 jQuery)

转载 作者:搜寻专家 更新时间:2023-11-01 00:41:41 25 4
gpt4 key购买 nike

我试图在不使用 jQuery 的情况下解决这个问题,以便我可以更好地理解它是如何工作的。

我正在向带有 JSON 对象的 Node 服务器发送 AJAX 请求。服务器可以接收请求并响应,但请求主体始终为空。我曾尝试将请求 header 设置为“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>

邮件功能

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);
}

Node 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.')
});

最佳答案

我想我理解了您的问题,您需要的是在不执行回发的情况下调用函数 sendEmail()。那么,为此您需要一个常规的 html 按钮而不是表单提交。表单用于执行对特定 url 的服务器请求并生成另一个回发。

你有两个选择:

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

<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>

2) 使用表单提交并直接从表单调用服务。参数将从表单中获取并在请求中发送:

<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"]

关于javascript - AJAX 请求正文为空(无 jQuery),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32085514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com