我正在构建一个带有Node / Express / Mongo后端的应用程序,并在前端使用简单的jquery。
当我向服务器发出Ajax POST时,res.send似乎没有发送任何能够被POST成功函数捕获的数据。
这是我的前端AJAX代码 -
$(".signup-form").submit(function(e){
var createUrl = $('.tutor-checkbox').is(':checked') ? serverUrls.createTutor : serverUrls.createStudent;
var formInput = {
email: $('#signup-email-input').val(),
password: $('#signup-password-input').val(),
first_name: $('#firstname-input').val(),
last_name: $('#lastname-input').val()
};
formInput = JSON.stringify({
user: formInput
});
$.ajax({
url:createUrl,
type:"POST",
data: formInput,
contentType:"application/json",
dataType:"JSON",
success: function(data){
console.log("success: ", data);
window.location = data.redirect;
}
})
e.preventDefault();
})
浏览器控制台中的打印输出为:
success: undefined main.js:45
Uncaught TypeError: Cannot read property 'redirect' of undefined main.js:46
我的服务器路由代码是:
app.post('/api/createtutor', function(req, res){
db.createUser(Tutor.model, req.body.user)
.then(function(data){
var queryString = utils.serialize({
first_name: req.body.user.first_name,
last_name: req.body.user.last_name
});
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
res.status(304).send({
redirect: "/tutor-profile-form?" + queryString
});
})
.catch(function(err){
res.status(404).end(JSON.stringify(err));
})
});
有人可以告诉我有什么问题吗?我已经坚持了很久!
提前非常感谢你。
答案 0 :(得分:0)
e.preventDefault();
应该是第一行。所以:
$(".signup-form").submit(function(e){
// This should be line one
e.preventDefault();
var createUrl = $('.tutor-checkbox').is(':checked') ? serverUrls.createTutor : serverUrls.createStudent;
// etc etc
})
答案 1 :(得分:0)
我发现了问题:
问题是我在服务器上的承诺:
db.createUser(Tutor.model, req.body.user)
.then(function(data){
...
我使用Q库来宣传这个功能,由于某些原因,Express不喜欢它并且没有执行res.send。
我把它改回了正常的回调,但它确实有效。