当谈到AJAX调用时,我是一个初学者,所以提前道歉,因为我被困住了,我不明白为什么!
总之,我有自己的服务器,它显示登录页面。使用路由器我正在确定表单中输入的详细信息是否正确,以便用户进入主页。我的登录按钮也链接到AJAX,我添加了一个事件处理程序,现在[应该]根据路由器中的检查结果显示警告框。
所以......我的问题是为每个响应显示正确的警告框。 “成功”警告框始终显示为状态代码200.错误代码:功能甚至未达到。
我有一个路由器文件来处理页面并处理登录检查,一个包含登录凭据,登录html页面和登录js文件的正确组合的js文件。我正在使用javascript和AJAX以及谷歌浏览器进行调试。我认为你需要的一些代码问题如下。请询问您是否还需要。
登录路由器检查:
app.post('/api/login/', function (req, res) {
console.log(req.body);
var emailLog = req.body.email;
var passwordLog = req.body.password;
validUser = false;
// Search user data
for (var x in USERS.users) {
if (emailLog === USERS.users[x].email && passwordLog === USERS.users[x].password) {
validUser = true;
break;
}
}
if (validUser === true) {
console.log("Log in successful");
res.send('Success');
} else {
console.log("Incorrect combination");
res.send('Error');
}
});
Login.js 这个文件正在执行AJAX:
$(document).ready(function(){
console.log("in doc ready");
$("#submit_button").click(function(e){
console.log("in event handler");
e.preventDefault();
$.ajax({type: "POST",
url: "/api/login",
data: { email: $("#email").val(),password: $("#password").val() },
success:function(data, textStatus, xhr){
alert("Successful");
console.log(xhr.status);
console.log(data);
},
error:function(data){
alert("Unsuccessful");
//$("#errorMessage").html("Incorrect email or password - Try again");
}
});
});
});
帮助!我在这里查看了几页AJAX问题,其中没有一个对我有用。最后我想在登录页面上的div中添加错误文本,但是现在我很乐意只显示正确警报! ...即使输入错误的组合,为什么总是返回成功提示框?有关修正此错误的正确方向的任何建议或指示吗?
更新 这是开发人员工具在控制台中显示的正确组合和错误组合的内容:
login.js:2 in doc ready
login.js:5 in event handler
login.js:18 200
login.js:20 Success
login.js:5 in event handler
login.js:18 200
login.js:20 Error
这是在cmd窗口中:
Example app listening at http://:::3000
{ email: 'a@a.com', password: 'a' }
a@a.com
a
Valid user : true
Log in successful
{ email: 'a@a.com', password: 't' }
a@a.com
t
Valid user : false
Incorrect log in combination - re-directing back to login page
答案 0 :(得分:1)
就AJAX而言,只要状态为" 200"被退回,这被视为"成功"并且错误功能不会触发。它与您作为响应发送的内容无关,它只是http状态代码。
所以调整你的成功功能:
success:function(data, textStatus, xhr){
console.log(xhr.status);
console.log(data);
if ( data == "Success" ) // thats what you send in case of a proper login
alert("Successful")
},
答案 1 :(得分:0)
在此行放置断点并确保结果正常
if (emailLog === USERS.users[x].email && passwordLog === USERS.users[x].password) {
validUser = true;
break;
}
这个逻辑始终使validuser
为真,这总是使它成功。