鱼C论坛

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

[Web前端] 求助前端开发

[复制链接]
发表于 2024-12-18 11:41:44 | 显示全部楼层 |阅读模式
60鱼币
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.     <title>登录页面</title>
  7.    <link rel="stylesheet" href="./css/denglu.css">
  8. </head>
  9. <body>
  10.     <div class="login-container">
  11.         <h2>登录</h2>
  12.         <form id="loginForm">
  13.             <div class="form-group">
  14.                 <label for="username">用户名:</label>
  15.                 <input type="text" id="username" placeholder="用户名" required>
  16.             </div>
  17.             <div class="form-group">
  18.                 <label for="password">密码:</label>
  19.                 <input type="password" id="password" placeholder="密码" required>
  20.             </div>
  21.         
  22.         <div class="captcha-container">
  23.             <img src="" alt="验证码" id="captchaImage" class="captcha-image">
  24.             <input type="text" id="captchaInput" placeholder="输入验证码" required>
  25.         </div>
  26.         <div class="form-group">
  27.             <button type="submit">登录</button>
  28.         </div>
  29.     </form>
  30.         
  31. </div>
  32. <script>
  33.    
  34. // ...之前的验证码生成和显示逻辑...
  35. function generateCaptcha() {
  36.     var canvas = document.createElement('canvas');
  37.     canvas.width = 100;
  38.     canvas.height = 30;
  39.    
  40.     var ctx = canvas.getContext('2d');
  41.     ctx.font = '20px Arial';
  42.     var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  43.     var captcha = '';
  44.     for (var i = 0; i < 4; i++) {
  45.         captcha += chars.charAt(Math.floor(Math.random() * chars.length));
  46.     }
  47.     ctx.fillText(captcha, 10, 25);
  48.     return { captcha: captcha, canvas: canvas };
  49. }

  50. // 显示验证码
  51. function displayCaptcha() {
  52.     var captchaData = generateCaptcha();
  53.     var captchaImage = document.getElementById('captchaImage');
  54.     captchaImage.src = captchaData.canvas.toDataURL();
  55.     captchaImage.captcha = captchaData.captcha; // 将验证码文本存储在图片元素上
  56.     // 设置验证码10秒后失效
  57.     setTimeout(function () {
  58.         captchaImage.src = '';
  59.         captchaImage.captcha = '';
  60.     }, 100000);
  61. }

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

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

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

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

  90.             } else {
  91.                 // 用户名或密码错误
  92.                 alert('用户名或密码错误!');
  93.             }
  94.         });
  95.     } else {
  96.         // 验证码错误
  97.         alert('验证码错误!');
  98.         displayCaptcha(); // 重新生成验证码
  99.     }
  100. });

  101. // 初始化验证码
  102. displayCaptcha();

  103. </script>
  104. </body>
  105. </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:// 协议出于安全限制不支持跨文件读取。 如果 ...
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

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


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

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2024-12-18 11:43:22 | 显示全部楼层
{
        "username": "张三",
        "password": "123456"
    },
    {
        "username": "李四",
        "password": "789456"
    },
用户账号有这些
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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


那有其他写法吗,这个是要交的作业,老师肯定是从文件夹直接打开的,谢谢你
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-9 15:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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