jquery - Ajax 帖子的成功部分无法在完整日历代码中运行
问题描述
在我的代码中,ajax post 方法的成功部分不起作用,我不知道为什么。这个 ajax 调用是通过 jquery 的 fullcalendar 函数的一部分。
ajax 请求将数据发送到 post 路由,并将其用于数据库 cal (mysql)。数据的传递和相应的 sql 查询工作正常,但 ajax 调用的成功部分不起作用(由缺少 console.log 输出证明)
下面是ajax调用的代码:
$.ajax({
url:"/insertEventsIntoDirectorInput",
type:"POST",
data:{title:title, start:start, end:end, urlPath: window.location.href.match(/\/([^/]*)$/)[1]},
success:function()
{
console.log('insert success function started');
calendar.fullCalendar('refetchEvents');
alert("Added Successfully");
}
})
以下是发布路线的代码:
router.post('/insertEventsIntoDirectorInput', function (req, res) {
if (req.body.title) {
var urlVariable = req.body.urlPath;
console.log(urlVariable);
console.log(typeof urlVariable);
var title = req.body.title;
var start = req.body.start;
var end = req.body.end;
dbjsMethods.geteIDFromDirectorInputForm(urlVariable, function(eID) {
console.log(eID);
console.log(typeof eID);
dbjsMethods.insertEventsInDirectorInput(eID[0].eID,title,start,end);
})
console.log(res);
}
});
下面是 sql 查询的代码(通过 node.js):
geteIDFromDirectorInputForm: function (url, callback) {
console.log('geteID function started');
console.log(url);
conn.query(`SELECT eID FROM directoravailabilitiesinputform where url = ?`, [url],
function (err, results, fields) {
if (err) throw err;
console.log(results);
return callback(results);
});
},
insertEventsInDirectorInput: function (eID,title,start,end) {
console.log('insert function started');
console.log(typeof eID);
conn.query('insert into directorinputevents(eID,title,start,end) values ("' +eID+ '","' +title+ '","' +start+ '","' + end + '")',
function (err, results, fields) {
if (err) throw err;
else console.log('Updated ' + results.affectedRows + ' row(s).');
});
},
当我运行该函数时,我希望输出“插入成功函数已启动”,如代码第一位中的 console.log 所示,但这不存在。
解决方案
服务器.post()
上的处理程序不发送响应。客户端仍在等待服务器的回复。您需要始终从服务器发回响应。
router.post('/insertEventsIntoDirectorInput', function (req, res) {
if (req.body.title) {
var urlVariable = req.body.urlPath;
console.log(urlVariable);
console.log(typeof urlVariable);
var title = req.body.title;
var start = req.body.start;
var end = req.body.end;
dbjsMethods.geteIDFromDirectorInputForm(urlVariable, function(eID) {
console.log(eID);
console.log(typeof eID);
dbjsMethods.insertEventsInDirectorInput(eID[0].eID,title,start,end);
res.sendStatus(200);
})
console.log(res);
} else {
res.sendStatus(500);
}
});
在这里我插入res.sendStatus(xxx)
是因为它看起来不像客户端期望从请求中返回任何数据,所以这只是将状态代码发送回来而没有数据。
仅供参考,您还需要修复您的geteIDFromDirectorInputForm()
方法以正确返回错误。
geteIDFromDirectorInputForm: function (url, callback) {
console.log('geteID function started');
console.log(url);
conn.query(`SELECT eID FROM directoravailabilitiesinputform where url = ?`, [url],
function (err, results, fields) {
if (err) {
callback(err);
} else {
console.log(results);
callback(null, results);
}
});
},
然后,更改调用代码以查看该错误:
router.post('/insertEventsIntoDirectorInput', function(req, res) {
if (req.body.title) {
var urlVariable = req.body.urlPath;
console.log(urlVariable);
console.log(typeof urlVariable);
var title = req.body.title;
var start = req.body.start;
var end = req.body.end;
dbjsMethods.geteIDFromDirectorInputForm(urlVariable, function(err, eID) {
if (err) {
console.log(err);
res.sendStatus(500);
} else {
console.log(eID);
console.log(typeof eID);
dbjsMethods.insertEventsInDirectorInput(eID[0].eID, title, start, end);
res.sendStatus(200);
}
});
} else {
res.sendStatus(500);
}
});
推荐阅读
- styled-components - styled-components 和 styled-components/macro 有什么区别
- sql - 我们可以通过 qldb 中的事务哈希检索文档修订吗
- python - 如何从 Selenium 中的变量构造 XPath?
- python - 在 Pandas 中按行/列合并两个数据框
- android - AccessibilityManager 未启用但通过 If 语句
- c# - 在 C# 中的另一个 MDI 表单中包含一个 MDI 表单
- ceph - 未及时深度清理的 Ceph PG 不断增加
- .net - 工作完成后自动停止控制台服务
- python - 使用 pyparsing,如何对 OneOrMore(expre1|expr2) 匹配的表达式进行分组?
- python - 在 Anaconda 上安装 Newsapi 时出现问题