gpt4 book ai didi

javascript - NodeJS : How to have multiple methods for post

转载 作者:行者123 更新时间:2023-12-02 15:02:21 25 4
gpt4 key购买 nike

我正在尝试使用nodejs制作一个迭代表单。

这是我的网页

<!DOCTYPE html>
<html>
<script>
$('#ping-button').click(function() {
$.ajax({
type: 'POST',
url: 'http://localhost:3000/process_test'
});
});
</script>
<body>
<form action="http://127.0.0.1:3000/process_get" method="GET">
First Name: <input type="text" name="first_name"> <br>

Last Name: <input type="text" name="last_name">
<input type="submit" value="Submit">
</form>
<br>
<form action="http://127.0.0.1:3000/process_post" method="POST">
Team: <input type="text" name="team"> <br>

Player: <input type="text" name="player">
<input type="submit" value="Submit">

<br><br>

<button id='ping-button'>Ping</button>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>

</form>
</body>
</html>

这是我的 app.js

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

// Create application/x-www-form-urlencoded parser
var urlencodedParser = bodyParser.urlencoded({ extended: false })

app.use(express.static('test'));

app.get('/index.html', function (req, res) {
res.sendFile( __dirname + "/" + "index.html" );
})

app.get('/process_get', function (req, res) {

// Prepare output in JSON format
response = {
first_name:req.query.first_name,
last_name:req.query.last_name
};
console.log(response);
res.end(JSON.stringify(response));
})

app.post('/process_test', urlencodedParser, function (req, res) {


console.log("Ping");
res.end(JSON.stringify("Ping"));
})

app.post('/process_post', urlencodedParser, function (req, res) {

// Prepare output in JSON format
response = {
team:req.body.team,
player:req.body.player
};
console.log(response);
res.end(JSON.stringify(response));
})



var server = app.listen(3000, function () {

var host = server.address().address
var port = server.address().port

console.log("Example app listening at http://%s:%s", host, port)

})

所以我有两个表单和一个按钮。第一个表单与 process_get 方法绑定(bind),第二个表单与 process_post 方法绑定(bind),按钮与 process_test 方法绑定(bind)。

两种形式都给出了预期的结果。当我单击按钮时,它会转到 process_post 方法,而不是 process_test

为什么会发生这种情况?

最佳答案

Ping 按钮之所以将表单提交到/process_post是因为它位于表单内部,并且由于错误而未设置点击处理程序。

如果您在浏览器中打开控制台,您将看到Uncaught ReferenceError:$未定义。这是因为您在代码中使用了 $,但您稍后在页面中包含了 jQuery。您可以通过在 script 标记之前加载 jQuery 来解决此问题。

完成后,您会发现该按钮仍然不起作用。这是因为 head 内的 script 在文档的其余部分完成之前执行,即。 body 内容还不存在,$('#ping_button') 将找不到任何内容。您可以通过将代码包装在 $(document).ready(function() {//code here }); 中来解决此问题,以便在加载整个页面后执行它。

不过,单击该按钮会将您发送至 /process_post,因为单击事件不会在您的单击处理程序中停止。返回 false 或使用 e.preventDefault() 禁用浏览器默认操作。

所有这些结合 head 部分(丢失的)将变成

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script>
$(document).ready(function() {
$('#ping-button').click(function(e) {
e.preventDefault();
$.ajax({
type: 'POST',
url: 'http://localhost:3000/process_test'
});
return false;
});
});
</script>
</head>
<body>
<!-- Rest of your page -->
</body>
</html>

关于javascript - NodeJS : How to have multiple methods for post,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35345067/

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