我尝试使用ajax从我的服务器端向客户端发送数据,但是当我在节点中使用res.send(数据)时,它会向我显示带有数据的空html,并且我想从客户端获取数据无需重新加载页面并在我的实际html中编辑内容
这是我的服务器端代码
app.post('/',(req,res)=>{
var userName = req.body.username;
var password = req.body.password;
connection.query('SELECT * from admin',(err, rows, fields)=> {
if (!err){
if((userName == rows[0].usuario) && (password == rows[0].contraseña)){
res.sendStatus(200);
}else{
res.send('Incorrect username or password')
}
}else{
res.send('Error while performing Query.');
}
});
});
这是我的客户端代码
$(document).ready(function(){
$('#login-form').submit(function (e) {
setTimeout(function () {
e.preventDefault();
$.ajax({
type: 'POST',
url: '/',
dataType: 'jsonp',
data: ({username: $('input[name=username]'),password: $('input[name=password]')}),
success: function(data,textStatus){
if(textStatus.statusCode == 200) {
$('.error-user').html('Succes');
}else{
$('.error-user').html('Not Success');
}
},
});
}, 1000);
});
});
更新:我删除了setTimeOut(),但是当我提交表单时,页面冻结了两秒钟,然后什么也没发生,我得到了这个'错误最大调用堆栈大小超过',没有得到如果从未调用post方法
,那么我的数据只会保持在同一视图中UPDATE-FINAL:我从ajax之外的输入中得到了值,并且效果很好,谢谢:#
答案 0 :(得分:1)
删除setTimeout,这会阻止你的preventDefault在实际的事件处理程序中运行,并导致你在浏览器加载而不是ajax处理程序中看到响应,并从那里进行调试。
答案 1 :(得分:1)
您忘了:data: ({username: $('input[name=username]').val(), password: $('input[name=password]').val() }),
发送输入值:
data: ({username: $('input[name=username]'),password: $('input[name=password]')}),
和NOT:
.collapse{
display: inline-block;
}
答案 2 :(得分:0)
Preventdefault正在制造问题。您可以删除它以运行Ajax调用
答案 3 :(得分:0)
如果我理解正确,您可能正在使用请求方法。
要从节点服务器的数据中检索数据,您应该在页面完成加载时使用GET
方法。
要在提交表单时向节点发送请求,您经常会从客户端js发送请求,以便对节点服务器上的数据库进行持久更改。根据您希望实现的目标,您应该使用POST
,PUT
,PATCH
,DELETE
方法。
这些方法通常会创建,更新,更新数据集的一部分,或从节点服务器可用的SQL或NoSQL数据库中删除记录或文档。