求助:FullCalendar选择日期后无法向API端点推送事件的问题
求助:FullCalendar选择日期后无法向API端点推送事件的问题
我一眼就看到了代码里的核心问题——你在fetch里用了eventData变量,但这个变量根本没定义!浏览器执行到这里会直接报错,导致整个请求逻辑都跑不起来,这就是你看不到请求的原因。另外你想要的用户确认弹窗逻辑也没加,我帮你一步步修正:
第一步:修复未定义的eventData,提取选中的日期
FullCalendar的select回调里的info对象包含了你选中的开始和结束日期,你需要把这些数据整理成API需要的格式。比如:
// 从info里提取日期,转成ISO格式(或者你API要求的其他格式) const eventData = { start: info.start.toISOString(), end: info.end ? info.end.toISOString() : info.start.toISOString(), // 处理单日选择的情况 title: '用户预订' // 可根据需求自定义标题 };
第二步:添加确认弹窗逻辑
你想要用户确认日期后再发请求,最简单的可以用浏览器原生的confirm弹窗,也可以用Bootstrap的模态框(你已经引入了Bootstrap,样式会更统一)。这里先给你用原生的示例,足够简单直接:
修正后的完整select回调代码
把你原来的select函数替换成下面这段:
select: function(info) { // 先弹出确认框,用本地化日期格式更友好 const startDate = info.start.toLocaleDateString(); const endDate = info.end ? info.end.toLocaleDateString() : startDate; const isConfirmed = confirm(`你确定要预订从 ${startDate} 到 ${endDate} 的时段吗?`); if (!isConfirmed) { // 用户取消,清除日历选中状态后返回 calendar.unselect(); return; } // 构造要发送给API的数据 const eventData = { start: info.start.toISOString(), end: info.end ? info.end.toISOString() : info.start.toISOString(), title: '用户预订' }; // 发送POST请求 fetch('/api/addbooking', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(eventData) }) .then(response => { if (!response.ok) { throw new Error('请求失败: ' + response.statusText); } return response.json(); }) .then(data => { console.log('预订成功:', data); calendar.refetchEvents(); // 刷新日历事件 calendar.unselect(); // 清除选中状态 alert('预订已成功提交'); }) .catch(error => { console.error('预订出错:', error); alert('预订失败,请稍后重试'); }); }
额外调试建议
- 打开浏览器开发者工具(按F12),切换到
Console标签页,查看是否有报错信息——这是前端调试最基础的步骤,你之前没看到请求,大概率是JS报错中断了执行,这里肯定能找到线索。 - 先用Postman或curl测试你的
/api/addbooking端点,确保后端能正常接收POST请求并返回正确响应,排除后端问题。 - 如果前端和Go后端是跨域部署(比如前端在
localhost:8080,后端在localhost:9000),需要在Go后端配置CORS允许跨域请求,否则浏览器会拦截请求。
这样修改后,应该就能正常触发确认弹窗,并且在用户确认后发送请求到你的API了。
备注:内容来源于stack exchange,提问作者Geoff Sweet




