代码都部署在服务器上。如下代码中是用户登录功能的实现
<script>
function login() {
var username = document.getElementById("username").value;
var password = document.getElementById("password").value;
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://xxx.xx.xxx.xx:xx/html/html/login/getVerify.js', true);
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
alert(xhr.responseText);
var data = JSON.parse(xhr.responseText);
flag = false
for (var i = 0; i < data.length; i++) {
if (data[i].username === username && data[i].password === password) {
flag = true
break;
}
}
if (flag) {
alert('登陆成功!')
window.location.href = 'index.html';
} else {
alert('用户名或密码错误,请重试!')
}
}
};
xhr.send();
}
function register(){
window.location.href='register.html'
// window.location.href='login.html'
}
</script>
其中getVerify.js文件内包含下述代码,我想要通过调用到login来实现登录,
```javascript
app.get('/login', (req, res) => {
const sql = 'SELECT * FROM username_password';
console.log(sql)
connection.query(sql, (error, results, fields) => {
if (error) {
res.status(500).send(error);
return;
}
res.json(results);
});
});
目前错误出现在第一段代码的 var data = JSON.parse(xhr.responseText);这里,我通过alert打印输出发现返回的是整个getVerify.js文件,而不是数据库中的用户名密码json格式。这些代码在本地是运行正常的,,然后我把ip地址换成服务器地址放到服务器上就出现了问题,
感觉错误是在xhr.open('GET', 'http://地址/html/html/login/getVerify.js', true);这里没有请求/login路由,但是不知道怎么改
引用 皆我百晓生 小程序回复内容作答:
根据你提供的描述,问题出现在以下代码段:
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://xxx.xx.xxx.xx:xx/html/html/login/getVerify.js', true);
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
alert(xhr.responseText);
var data = JSON.parse(xhr.responseText);
// ...
}
};
xhr.send();
问题可能是由于你请求了错误的 URL 导致的。根据你的描述,你正在尝试获取 getVerify.js
文件的内容,然而,你将该地址作为 AJAX 请求的 URL。这将导致 xhr.responseText
返回的是 getVerify.js
文件的内容,而不是你期望的从服务器返回的用户名和密码的 JSON 格式数据。
解决方法是将 AJAX 请求的 URL 修改为登录路由的 URL,即 /login
。
修改后的代码如下所示:
var xhr = new XMLHttpRequest();
xhr.open('GET', '/login', true); // 修改为登录路由的 URL
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
var data = JSON.parse(xhr.responseText);
// ...
}
};
xhr.send();
这样,当你调用 login()
函数时,它将向 /login
发送 AJAX 请求,获取服务器返回的用户名和密码数据,并继续处理后续逻辑。希望这能解决你的问题!
把错误报错截图处理看看
你的前端代码中使用XMLHttpRequest尝试获取getVerify.js文件,但是您的getVerify.js文件中实际上包含了一个Express路由,该路由用于处理登录验证。这个结构是不合适的。如果您希望通过调用login函数实现用户登录,您不应该将登录验证的Express路由放在一个JavaScript文件中,而是应该将登录验证的后端逻辑集成到服务器的路由中,然后在前端代码中使用XMLHttpRequest或其他HTTP请求库来向服务器发送登录请求。
以下是一种可能的修改方法:
在服务器端(Node.js Express)中创建一个用于处理登录请求的路由:
const express = require('express');
const app = express();
const port = 3000; // 您的服务器端口
// 添加一个路由用于处理登录请求
app.get('/login', (req, res) => {
const username = req.query.username; // 通过查询参数获取用户名
const password = req.query.password; // 通过查询参数获取密码
// 连接数据库并执行登录验证逻辑
// 在这里查询数据库,验证用户名和密码是否匹配
// 如果匹配成功,可以向客户端发送一个成功响应,否则发送失败响应
// 这里是一个简化的示例:
if (username === '正确的用户名' && password === '正确的密码') {
res.json({ success: true });
} else {
res.json({ success: false });
}
});
app.listen(port, () => {
console.log(`服务器运行在 http://localhost:${port}`);
});
在前端代码中,修改login函数以使用XMLHttpRequest向服务器发送登录请求:
function login() {
var username = document.getElementById("username").value;
var password = document.getElementById("password").value;
var xhr = new XMLHttpRequest();
// 修改请求地址为服务器端的/login路由
xhr.open('GET', `http://xxx.xx.xxx.xx:xx/login?username=${username}&password=${password}`, true);
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
var response = JSON.parse(xhr.responseText);
if (response.success) {
alert('登录成功!');
window.location.href = 'index.html';
} else {
alert('用户名或密码错误,请重试!');
}
} else {
alert('登录请求失败,请检查服务器连接。');
}
}
};
xhr.send();
}
这样,前端代码将通过XMLHttpRequest向服务器的/login路由发送用户名和密码,并且服务器将根据提供的用户名和密码进行验证。如果验证成功,服务器将返回一个成功的响应,否则将返回一个失败的响应,然后前端代码可以根据响应来处理用户登录的结果。
原因有以下几点:
援引讯飞星火:
你需要将xhr.open('GET', 'http://xxx.xx.xxx.xx:xx/html/html/login/getVerify.js', true);
中的URL改为正确的服务器地址和端口,同时确保服务器已经正确配置了路由。你可以尝试以下修改:
xhr.open('GET', 'http://xxx.xx.xxx.xx:xx/html/html/login/getVerify.js', true);
修改为:
xhr.open('GET', '/html/html/login/getVerify.js', true);
这样,你的请求将会发送到服务器的根路径,然后根据相对路径找到getVerify.js
文件。请确保服务器已经正确配置了路由,以便能够正确处理这个请求。
根据你提供的信息,可以看出问题出在xhr.open函数中对url的设置上。目前的设置是请求getVerify.js文件,而不是请求/login路由获取数据库中的数据。要解决这个问题,需要将xhr.open函数中的url修改为请求/login路由,如下所示:
xhr.open('GET', 'http://地址/login', true);
这样就可以正确请求/login路由获取数据库中的数据了。
从错误截图来看的话是,语法错误,直接找人远程,这么看不容易看出来,还有你说本地是可以的,放到服务器不行,就是参数配置没配置好!
根据你提供的代码,可能问题出在这个请求地址 'http://xxx.xx.xxx.xx:xx/html/html/login/getVerify.js' 上。你可以尝试修改请求地址为 '/login',即对应服务器端的 '/login' 路径,确保前后端请求的是同一个接口。
另外,你也可以在服务器端输出一下获取到的数据,确保数据确实是从数据库中获取的,而不是其他文件。例如可以在服务器端的路由代码中添加一行 console.log(results),检查是否获取到了正确的数据。
最后,确保你的服务器端配置允许跨域请求,否则客户端可能无法正常请求到服务器端的数据。可以在服务器端添加如下中间件解决跨域问题:
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
该回答引用ChatGPT,希望对题主有所帮助,如有帮助,还望采纳。
根据您提供的信息,第一段代码中的xhr.open()方法应该将URL改为请求/login路由,而不是getVerify.js文件,因为getVerify.js文件似乎不包含需要的JSON数据。
所以需要修改成:
xhr.open('GET', 'http://xxx.xx.xxx.xx:xx/login', true);
这样就会请求/login路由,从而获取与获取用户名和密码相关的JSON数据。
另外,确认一下数据库中的表名和字段名是否正确。如果表名或字段名不正确,也会导致JSON数据无法正确获取。
【以下回答由 GPT 生成】
<script>
function login() {
var username = document.getElementById("username").value;
var password = document.getElementById("password").value;
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://xxx.xx.xxx.xx:xx/html/html/login/getVerify.js', true);
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
var data = JSON.parse(xhr.responseText);
var flag = false;
for (var i = 0; i < data.length; i++) {
if (data[i].username === username && data[i].password === password) {
flag = true;
break;
}
}
if (flag) {
alert('登陆成功!');
window.location.href = 'index.html';
} else {
alert('用户名或密码错误,请重试!');
}
}
};
xhr.send();
}
function register(){
window.location.href='register.html';
// window.location.href='l
}
</script>
请将上述代码插入到HTML文件的合适位置,确保<script>
标签被正确包围,并确保该代码被正确调用。
结合GPT给出回答如下请题主参考
抱歉,你提供的代码不完整,无法给出具体的解答。可以补充完整的代码并说明具体问题,这样我才能帮助你更好地解决问题。
使用javascript实现简易登录功能
新建一个js文件(我这里取名为Signin.js),定义两个变量,用户名和密码,使用从网页中输入的参数进行赋值,之后进行if判断语句,如果输入的用户名和密码都匹配正确则弹窗登陆成功,并且进入指定网页,如果用户名或者密码不正确,则弹窗用户名或密码错误,如果用户名未输入,则弹窗用户名不能为空,如果密码未输入,则弹窗密码为空,js代码如下(复制可直接使用):
function login() {
var userName = document.getElementById("nName").value;
var userPass = document.getElementById("uPass").value;
if (userPass == "123456" && userName == "root") {
alert("登入成功");
window.location.href="index.html";
}
else if (userName == "" || userName == null) {
alert("用户名不能为空");
return false;
}
else if (userPass == "" || userPass == null) {
alert("密码不能为空");
return false;
}
else if (userPass != "123456" || userName != "mhh") {
alert("用户名或密码错误");
return false;
}
else{
return true;
}
}
之后在你的html文件中导入该文件
<script src="Signin.js"></script>
html文件中body标签下的登录窗口需要有用户输入栏,我是这样写的(也可直接复制)
<body style="text-align: center;background-image:url('JPG/denglu.jpg');" onLoad="document.getElementById('enter').focus()" οnkeydοwn="if(event.keyCode===13) document.all.enter.click()"><br><br><br><br><br>
#此处导入CSS文件
<style>
@import url(denglu.css);
</style>
<div style="text-align: center;width: 100%;height: 50px;color: #fff;font-family: '楷体';font-size: 30px;text-shadow: -2px 2px 0 skyblue,2px 2px 0 skyblue,2px -2px 0 skyblue;"><h1>登录</h1></div>
<div class="content" >
<div class="login-wrap">
<form id="user_login" action="">
<h3 style="font-family: '楷体';">登 录</h3><br>
账号:<input class="name" name="name" id="nName" type="text" placeholder="请输入用户名" ><br>
密码:<input class="code" name="password" id="uPass" type="password" placeholder="请输入密码" >
<div class="btn" onLoad="document.getElementById('enter').focus()">
<input type="button" id="enter" class="submit" value="登录" οnclick="login()">
<input type="reset" id="reset" class="reset" value="重置" >
</div>
<div id="CheckMsg" class="msg"></div>
</form>
</div>
</div>
</body>
注意:CSS样式需要定义来美化用户页面
我的CSS文件如下:
.content{
padding:0 auto;
margin: 0 auto;
height: 450px;
width: 100%;
background-size:100% 450px ;
margin-top: 25px;
}
.login-wrap{
position: absolute;
width:320px;
height: 300px;
border-radius: 10px;
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
right:40%;
margin-top: 75px;
background: url("../Image/Login-Img/form_bg.png") no-repeat;
background-size: 100%;
border-radius: 25px;
background-color: #fff;
opacity: 0.8;
}
.login-wrap h3{
color:black;
font-size: 18px;
text-align: center;
}
.name,.code{
border:1px solid cyan;
width:130px;
height: 40px;
margin-left: 25px;
margin-bottom: 20px;
padding-left: 40px;
border-radius:12px;
border-color:skyblue;
}
.name{
color: black;
background-position-x:12px;
}
.code{
color: blue;
background-position-x:12px;
}
.btn input{
height: 40px;
width: 120px;
float: left;
margin-right: 25px;
border:none;
color:black;
font-size: 16px;
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
border-radius: 10px;
margin-top: 10px;
cursor: pointer;
}
input:active{border-color:#147a62}
.submit{background: #ea8c37;margin-left: 25px;}
.reset{background: #bbb;}
/**错误信息提醒**/
.msg{
color: #ea8c37;
font-size: 14px;
padding-left: 40px;
padding-top: 10px;
clear: both;
font-weight: bold;
}