阿贾克斯不能与节点JS工作 - 快递JS
我试着从我的服务器端发送的数据与阿贾克斯我的客户端,但是当我使用节点res.send(数据),它显示我的数据空html和我想从我的客户端数据,而无需重新加载页面,并在我的实际HTML阿贾克斯不能与节点JS工作 - 快递JS
这里编辑的东西是我的服务器端代码
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决赛:我得到了阿贾克斯之外的输入值和它的作品很好,谢谢:#
删除这是防止你的preventDefault从实际运行的setTimeout事件处理程序,并导致您在浏览器负载中而不是ajax处理程序中查看响应,然后从中进行调试。
如果我这样做,页面冻结了一会儿,然后什么都没有发生,它给了我这个错误='超过最大调用堆栈大小' –
你可以添加信息到你的问题,如完整的代码和确切的错误消息?setTimeout绝对不正确..所以调用堆栈是修复 –
看看更新的问题 –
Preventdefault正在创建问题。您可以删除运行Ajax调用
仍然带我到另一个html –
如果我理解正确的话,你可能要使用的请求方法。
要从节点服务器的数据检索数据的页面完成加载时,你应该使用GET
方法。
要发送当表单提交您经常会发送从客户端JS的请求作出的节点服务器上的数据库的持久变化节点的请求。根据你想实现什么,你应该使用POST
,PUT
,PATCH
,DELETE
方法。
这些方法通常会创建,更新,更新数据集的一部分,或从SQL或可用的NoSQL数据库到您的节点服务器中删除记录或文件。
我不能使用GET方法,因为信息是来自用户的用户名和密码 –
你忘了:.val()
发送的输入值:
data: ({username: $('input[name=username]').val(), password: $('input[name=password]').val() }),
和NOT:
data: ({username: $('input[name=username]'),password: $('input[name=password]')}),
添加错误处理程序Ajax调用。它也看起来像你不回发jsonp – epascarello
你为什么使用'setTimeout()'?这是问题的一部分。你的表单已经提交,并且在你运行你的ajax调用之前,在你调用'e.preventDefauilt()'之前,表单提交就会重新加载页面,所以调用的时间太晚了。除去'setTimeout()'或在'setTimeout()'之前放置'e.preventDefault()'。在任何一种情况下,'setTimeout()'看起来都像是一团糟的代码。如果你认为你正在修复某些东西,那么这是一个黑客攻击,你应该修正它的正确方法,并删除'setTimeout()'。 – jfriend00
外观更新问题 –