Javascript axios()方法不适用于POST请求
我试图通过单击Javascript axios()方法不适用于POST请求,javascript,axios,Javascript,Axios,我试图通过单击Go按钮从startQuiz.ejs页面发送post请求,但始终在服务器上执行get请求。如果我使用postman,则没有问题,但从front-end执行post请求失败 我希望输出为post request,但每次在浏览器上单击GO按钮时,我都会得到get request 这是我的档案 startQuiz.ejs <%- include('./partial/header.ejs'); %> <form id='abcd'> <butto
Go按钮
从startQuiz.ejs
页面发送post
请求,但始终在服务器上执行get
请求。如果我使用postman
,则没有问题,但从front-end
执行post
请求失败
我希望输出为post request,但每次在浏览器上单击GO按钮时,我都会得到get request
这是我的档案
startQuiz.ejs
<%- include('./partial/header.ejs'); %>
<form id='abcd'>
<button type="submit">Go</button>
</form>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js" crossorigin="anonymous ">
const form = document.querySelector('#abcd');
form.addEventListener('submit', async(event) => {
event.preventDefault();
console.log('Log here');
try {
await axios({
method: 'post',
url: '/startQuiz',
data: {
firstName: 'Fred',
},
});
} catch (e) {
console.log(e);
}
});
</script>
<%- include('./partial/footer.ejs'); %>
const express = require('express');
const app = express();
const home = require('./routes/home');
const register = require('./routes/register');
const login = require('./routes/login');
const logout = require('./routes/logout');
const me = require('./routes/me');
const createQuestion = require('./routes/createQuestion');
const takeQuiz = require('./routes/takeQuiz');
const startQuiz = require('./routes/startQuiz');
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');
const { checkUser } = require('./middleware/auth');
const path = require('path');
app.use(bodyParser.urlencoded({ extended: true }));
app.use(express.json());
app.use(express.static('public'));
app.set('view engine', 'ejs');
app.use(cookieParser());
app.use('*', checkUser);
app.use('/', home);
app.use('/register', register);
app.use('/login', login);
app.use('/logout', logout);
app.use('/me', me);
app.use('/createQuestion', createQuestion);
app.use('/takeQuiz', takeQuiz);
app.use('/startQuiz', startQuiz);
const port = process.env.PORT || 8200;
app.listen(port, () => { console.log(`Running on ${port}`) });
index.js
<%- include('./partial/header.ejs'); %>
<form id='abcd'>
<button type="submit">Go</button>
</form>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js" crossorigin="anonymous ">
const form = document.querySelector('#abcd');
form.addEventListener('submit', async(event) => {
event.preventDefault();
console.log('Log here');
try {
await axios({
method: 'post',
url: '/startQuiz',
data: {
firstName: 'Fred',
},
});
} catch (e) {
console.log(e);
}
});
</script>
<%- include('./partial/footer.ejs'); %>
const express = require('express');
const app = express();
const home = require('./routes/home');
const register = require('./routes/register');
const login = require('./routes/login');
const logout = require('./routes/logout');
const me = require('./routes/me');
const createQuestion = require('./routes/createQuestion');
const takeQuiz = require('./routes/takeQuiz');
const startQuiz = require('./routes/startQuiz');
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');
const { checkUser } = require('./middleware/auth');
const path = require('path');
app.use(bodyParser.urlencoded({ extended: true }));
app.use(express.json());
app.use(express.static('public'));
app.set('view engine', 'ejs');
app.use(cookieParser());
app.use('*', checkUser);
app.use('/', home);
app.use('/register', register);
app.use('/login', login);
app.use('/logout', logout);
app.use('/me', me);
app.use('/createQuestion', createQuestion);
app.use('/takeQuiz', takeQuiz);
app.use('/startQuiz', startQuiz);
const port = process.env.PORT || 8200;
app.listen(port, () => { console.log(`Running on ${port}`) });
提交表单将导航到新页面并取消Ajax请求
如果要发出Ajax请求,需要防止表单提交的默认行为
ex.preventDefault();
(ex
是一个非常不寻常的变量名,用于表示事件对象,e
、evt
和Event
更常见)。侦听器回调中的第一个参数可能是事件
,您在代码中将其命名为ex
,但您正在检查它是否已定义,如果已定义并返回,则之后的代码将永远不会执行。也许你把它弄错了
form.addEventListener('submit',异步(ex)=>{
如果(ex){
控制台日志(ex);
返回;
}
//代码将在此处停止,因为ex(事件)将始终定义
// ...
});
试试这个
form.addEventListener('submit',异步(事件)=>{
event.preventDefault();
//在此处执行请求
});
位背景信息:您是否尝试过在请求选项中使用axios.post()
方法,或者使用post
小写而不是post
?另外,我非常确定在您的情况下,事件侦听器ex
将始终被定义,因为它是事件参数,所以您的回调永远不会执行请求!尝试了您的方法但未获得所需的输出所以您的意思是/startQuiz的快速路线邮政从未被解雇?或者现在有什么问题?是的,但是现在console.log('log here')也不能正常工作。addEventListener()和我还发现fetch()代替axios()也不能正常工作这很奇怪。。。让我来看看我是否能举出一个例子来看看