鱼C论坛

 找回密码
 立即注册
查看: 61|回复: 3

[Web前端] 求助前端开发

[复制链接]
发表于 3 天前 | 显示全部楼层 |阅读模式
60鱼币
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>登录页面</title>
   <link rel="stylesheet" href="./css/denglu.css">
</head>
<body>
    <div class="login-container">
        <h2>登录</h2>
        <form id="loginForm">
            <div class="form-group">
                <label for="username">用户名:</label>
                <input type="text" id="username" placeholder="用户名" required>
            </div>
            <div class="form-group">
                <label for="password">密码:</label>
                <input type="password" id="password" placeholder="密码" required>
            </div>
        
        <div class="captcha-container">
            <img src="" alt="验证码" id="captchaImage" class="captcha-image">
            <input type="text" id="captchaInput" placeholder="输入验证码" required>
        </div>
        <div class="form-group">
            <button type="submit">登录</button>
        </div>
    </form>
        
</div>
<script>
    
// ...之前的验证码生成和显示逻辑...
function generateCaptcha() {
    var canvas = document.createElement('canvas');
    canvas.width = 100;
    canvas.height = 30;
    
    var ctx = canvas.getContext('2d');
    ctx.font = '20px Arial';
    var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
    var captcha = '';
    for (var i = 0; i < 4; i++) {
        captcha += chars.charAt(Math.floor(Math.random() * chars.length));
    }
    ctx.fillText(captcha, 10, 25);
    return { captcha: captcha, canvas: canvas };
}

// 显示验证码
function displayCaptcha() {
    var captchaData = generateCaptcha();
    var captchaImage = document.getElementById('captchaImage');
    captchaImage.src = captchaData.canvas.toDataURL();
    captchaImage.captcha = captchaData.captcha; // 将验证码文本存储在图片元素上
    // 设置验证码10秒后失效
    setTimeout(function () {
        captchaImage.src = '';
        captchaImage.captcha = '';
    }, 100000);
}

// 绑定验证码图片点击事件
document.getElementById('captchaImage').addEventListener('click', function () {
    displayCaptcha();
});

// 初始化验证码
displayCaptcha();
// 加载用户数据
function loadUsers(callback) {
    fetch('users.json')
        .then(response => response.json())
        .then(data => callback(data))
        .catch(error => console.error('加载用户数据失败:', error));
}

// 登录表单提交事件
document.getElementById('loginForm').addEventListener('submit', function (event) {
    event.preventDefault();
    var username = document.getElementById('username').value;
    var password = document.getElementById('password').value;
    var inputCaptcha = document.getElementById('captchaInput').value;
    var actualCaptcha = document.getElementById('captchaImage').captcha;

    // 验证验证码
    if (inputCaptcha === actualCaptcha) {
        // 验证码正确,加载用户数据进行验证
        loadUsers(function (users) {
            var user = users.find(u => u.username === username && u.password === password);
            if (user) {
                // 用户名和密码正确
                 location.href = 'https://www.baidu.com/'

            } else {
                // 用户名或密码错误
                alert('用户名或密码错误!');
            }
        });
    } else {
        // 验证码错误
        alert('验证码错误!');
        displayCaptcha(); // 重新生成验证码
    }
});

// 初始化验证码
displayCaptcha();

</script>
</body>
</html>
求助,为啥这个在vscode里live server可以正常跳转,但是从文件夹直接打开就不行呢?
文件是这么放的
屏幕截图 2024-12-18 114104.png

最佳答案

查看完整内容

直接使用 file:// 协议访问 HTML 文件会导致 fetch 请求失败,最简单的方法是继续使用 Live Server 或搭建一个本地 HTTP 服务器。 Live Server 启动的是一个本地 HTTP 服务器(如 http://127.0.0.1:5500),通过 HTTP 协议加载资源文件(如 users.json)。 直接从文件夹打开 的情况下,浏览器使用 file:// 协议加载文件,此时无法正常处理相对路径的 fetch 请求,因为 file:// 协议出于安全限制不支持跨文件读取。 如果 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 3 天前 | 显示全部楼层
直接使用 file:// 协议访问 HTML 文件会导致 fetch 请求失败,最简单的方法是继续使用 Live Server 或搭建一个本地 HTTP 服务器。

Live Server 启动的是一个本地 HTTP 服务器(如 http://127.0.0.1:5500),通过 HTTP 协议加载资源文件(如 users.json)。

直接从文件夹打开 的情况下,浏览器使用 file:// 协议加载文件,此时无法正常处理相对路径的 fetch 请求,因为 file:// 协议出于安全限制不支持跨文件读取。


如果不想依赖 Live Server,就要自己在本地搭建一个 HTTP 服务器~~

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 3 天前 | 显示全部楼层
{
        "username": "张三",
        "password": "123456"
    },
    {
        "username": "李四",
        "password": "789456"
    },
用户账号有这些
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 3 天前 | 显示全部楼层
本帖最后由 王小二° 于 2024-12-18 15:20 编辑
不二如是 发表于 2024-12-18 11:55
直接使用 file:// 协议访问 HTML 文件会导致 fetch 请求失败,最简单的方法是继续使用 Live Server 或搭建 ...


那有其他写法吗,这个是要交的作业,老师肯定是从文件夹直接打开的,谢谢你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-21 20:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表