我需要将数据从Express应用程序的前端发送到后端,然后使用需要显示该数据的EJS呈现页面。
问题是app.post()
方法,当我通过{{发出“手动”POST请求时,res.render()
函数似乎无法完全或正确执行1}}或$.post
假设我通过JQuery发出此POST请求
$.ajax
或通过AJAX发出此POST请求
$.post("/test", {
testData: 'Some test data.'
});
我配置我的app.post()方法来处理Express
中的路由
$.ajax({
type: 'POST',
data: {
testData: 'Some test data here.'
}),
url: '/test',
})
变量testData将通过app.post()方法发送和接收。所以说如果我这样做:app.post('/test', function(req, res) {
res.render('./test.ejs', {
testMessage: req.body.testData
});
});
,输出将是console.log(req.body.testData)
,所以那里没有问题。
问题在于Some test data
功能,如果res.render()
请求是通过POST
或通过AJAX $.post
完成的,则根本不起作用。 res.render()函数不会通过$.ajax
或$.post
发出的POST请求执行或呈现页面。
奇怪的是,如果通过表单执行相同的$.ajax
请求(我不想在我的应用程序中执行,因为POST
请求不应该发送从输入接收的数据),在Express中 EXACT 相同的POST
路由处理程序可以很好地工作。
例如,使用类似下面的表单可以使用app.post()
显示页面,而res.render()
和$.post()
方法则不然。为什么会这样?
$.ajax
我发现StackOverflow上的另一个问题与我的非常相似,但除了表单选项(我不能使用)之外没有明确的解决方法:Express.js Won't Render in Post Action
有什么建议吗?
答案 0 :(得分:1)
使用Ajax的意思是HTTP响应返回到JavaScript 并且不会替换整个页面。
如果要加载新页面,请不要使用Ajax。使用表格。
如果你想在JavaScript中处理响应,那么你需要为它添加一个处理程序。
let firstSwitch = XCUIApplication().switches.elementBoundByIndex(0)
_ = self.expectationForPredicate(
NSPredicate(format: "self.value = %@", enabled),
evaluatedWithObject: firstSwitch,
handler: nil)
self.waitForExpectationsWithTimeout(15.0, handler: nil)
答案 1 :(得分:1)
正如其他人所指出的,jQuery .post,.ajax等不期望重定向,它期望JSON,所以这不起作用。但是,您可以通过一些简单的JavaScript获得您正在寻找的效果。这就是我遇到类似问题时的表现:
首先,我创建了一个URL字符串,将我想要传递给服务器的数据附加为查询参数
var urlString = 'http://hostaddress/myRoute?data1='+myData1+'data2='myData2;
其次,我这样做了一个window.location.replace:
window.location.replace(urlString);
第三,我在Express中制定了一条GET路由来处理传入的请求:
app.get('/myRoute', function(req,res){
var myData1 = req.query.data1;
var myData2 = req.query.data2;
res.render('myView',{data1:myData1,data2:myData2});
希望有所帮助。
答案 2 :(得分:0)
我遇到了同样的问题,并在不使用$ .post或$ .ajax的情况下解决了这个问题。首先,我从表单元素中取出了按钮:
<form id="form-test" role="form" action="/test" method="post">
<input type="text" name="testData" placeholder="Test Data Goes Here">class="form-control" required>
</form>
<button class="btn" type="submit">Submit</button>
我将发布表单条件绑定到单击按钮事件。我也可以发布我想要的价值。例如:
$(".btn").click(function(){
if($(".form-control").val() ){
$(".form-control").val("Desired Value");
$("#form-test").submit();
}else
alert("TestData is empty");
});