html web前端 登录,短信验证码登录

news2025/4/21 14:38:18

html web前端 登录,短信验证码登录

1,手机号码格式校验
2,按钮点击60秒倒计时,按钮限制点击
3,验证码/或密码长度校验(被注释,公司发的验证码长度不一致,不一定是6位)
4,get网络请求
5,post网络请求 json带参上传
6,服务器返回值打印

6d4f50def6875c3f0b5b898f83cc4664.jpg

<html>
    <head>
        <meta charset="UTF-8">
        <title>登录</title>
    </head>

    <body>
        <div>

            <div style="margin: 10px;">
                <input style="width: 200px; " id="phone" type="text" autocomplete="off" placeholder="请输入手机号" />
                <input style="width: 100px; " id="btnSendCode" type="button" value="获取验证码" onClick="sendMessage()" />
            </div>

            <div style="margin: 10px;">
                <input style="width: 300px;" id="code" type="text" autocomplete="off" placeholder="请输入验证码" />
            </div>

            <div style="margin: 15px;">
                <button style="width: 100px;" onClick="login()"> 登 录 </button>
                <span style="width: 200px;" id="logintext" class="ssss">log打印:</span>
            </div>

        </div>
    </body>


    <script type="text/javascript">
        var phoneDom = document.querySelector('#phone');
        var codeDom = document.querySelector('#code');
        var btnSendCode = document.querySelector("#btnSendCode");

        var count = 60; //间隔函数,1秒执行
        var InterVal; //timer变量,控制时间
        //var count;//当前剩余秒数
        function SetTime() {
            if (curCount == 0) {
                window.clearInterval(InterVal); //停止计时器
                btnSendCode.removeAttribute("disabled"); //启用按钮
                btnSendCode.value = "重新发送";
            } else {
                curCount--;
                btnSendCode.value = curCount + "秒再获取";
            }
        }
        /**
         * 获取验证码
         */
        function sendMessage() {
            /
            var phoneReg = /(^1[3|4|5|7|8]\d{9}$)|(^09\d{8}$)/; //手机号正则
            var phone = (phoneDom.value).trim();
            if (!phoneReg.test(phone)) {
                alert(" 请输入有效的手机号码");
                return false;
            } /
            curCount = count;
            //设置button效果,开始计时
            btnSendCode.setAttribute("disabled", "true");
            btnSendCode.value = curCount + "秒再获取";
            InterVal = window.setInterval(SetTime, 1000); //启动计时器,1秒执行一次


            /
            //向后台发送处理数据
            // 创建对象
            const xhr = new XMLHttpRequest();
            xhr.responseType = "json"
            //初始化
            xhr.open('GET', 'https://api.wzyanche.com/sms/SendSms/' + phoneDom.value);
            //发送
            xhr.send();
            //处理返回值
            xhr.onreadystatechange = function() {
                if (xhr.readyState === 4) {
                    if (xhr.status == '200') {
                        //手动对数据转化
                        let data = xhr.response;
                        console.log('111 111 返回的数据', data);
                    }
                }
            }
        }
        /**
         * 登录
         * 提交信息
         */
        function login() {
            // var code = codeDom.value;
            // if (!code || code.trim().length != 6) {
            // alert(" 请输入6位短信验证码");
            // return false;
            // }

            // 创建一个 XMLHttpRequest 对象
            var xhr = new XMLHttpRequest();

            // 配置请求
            xhr.open('POST', 'https://api.wzyanche.com/cusInfo/login', true);
            xhr.setRequestHeader('Content-Type', 'application/json');

            // 发送 JSON 数据
            var data = {
                phone: phoneDom.value,
                verificationCode: codeDom.value,
            };
            xhr.send(JSON.stringify(data));

            // 监听请求的状态
            xhr.onreadystatechange = function() {
                if (xhr.readyState === 4 && xhr.status === 200) {
                    // 请求成功后的处理
                    console.log(xhr.responseText);
                    // 打印,获取json里的对象
                    var data2 = JSON.parse(xhr.responseText)
                    console.log('222 222 返回的数据', data2.retMsg);
                    // 打印返回值
                    document.getElementById("logintext").textContent = data2.retMsg;
                }
            };
        }
    </script>

</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1126543.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LabVIEW应用开发——控件的使用(三)

接上文&#xff0c;这篇介绍簇Cluster控件。 LabVIEW应用开发——控件的使用&#xff08;二&#xff09; 1、簇Cluster 1&#xff09;创建 蔟控件又称为组合、集群控件&#xff0c;顾名思义它是一个类似于C语言的结构体的一个数据结构控件。在描述一个对象的时候&#xff0c;…

SAP POorPI RFC接口字段调整后需要的操作-针对SP24及以后的PO系统

文章目录 问题描述解决办法 问题描述 在SAP系统的RFC接口结构中添加了字段&#xff0c;RFC也重新引用到了PO系统&#xff0c;Cache和CommunicationChannel都刷新或启停了&#xff0c;但是新增的字段在调用接口的时候数据进不到SAP系统&#xff0c;SAP系统内的值也出不来。经过…

图像处理之《基于多MSB预测和Huffman编码的加密图像可逆数据隐藏》论文精读

一、文章摘要 随着云存储和隐私保护的发展&#xff0c;可逆数据隐藏在加密图像中(RDHEI)作为一种技术越来越受到人们的关注&#xff0c;它可以&#xff1a;在图像加密领域嵌入额外的数据&#xff0c;确保嵌入的数据可以无差错地提取&#xff0c;原始图像可以无损地恢复。本文提…

安卓 实现60s倒计时的CountDownTimer(小坑)

安卓 实现60s倒计时的CountDownTimer&#xff08;小坑&#xff09; 前言一、CountDownTimer 是什么&#xff1f;二、代码示例1.使用2.小坑的点误差及时取消 总结 前言 前段时间写倒计时没有用线程&#xff0c;想换一种实现方式结果踩了个小坑&#xff0c;特此记录。 一、Count…

no main manifest attribute, in xxx.jar

使用Docker运行一个SpringBoot应用时&#xff0c;出现如下图所示的错误信息 解决方案&#xff1a; SpringBoot应用的pom.xml文件中添加以下配置;重新打包即可 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifac…

计算机网络——理论知识总结(上)

开新番&#xff0c;因为博主备考的学校计网只考察1/6的分值&#xff0c;而且定位偏向于送分题&#xff0c;因此在备考时并没有很高强度的复习。本帖基于王道考研的教辅总结归纳&#xff0c;虽然是408的教材&#xff0c;但忽略其中有难度的部分&#xff0c;如计算题、画图题等&a…

18.Raising and Lower Indexs

提高和降低张量索引 同样&#xff0c;使用的是非标准的符号。 我们对V和熟悉&#xff0c;一个是向量所在的空间&#xff0c;一个是协向量所在的 对偶空间 &#xff0c; 有一个问题&#xff1a; 有何办法能在V的向量与 的协向量之间 建立对应的关系&#xff1f; 换句话说&…

Git中 fork, clone,branch有什么区别?

一、是什么 fork fork&#xff0c;英语翻译过来就是叉子&#xff0c;动词形式则是分叉&#xff0c;如下图&#xff0c;从左到右&#xff0c;一条直线变成多条直线 转到git仓库中&#xff0c;fork则可以代表分叉、克隆 出一个&#xff08;仓库的&#xff09;新拷贝 包含了原来…

如何安装ubuntu22.04以及ubuntu各个版本配置国内源和ssh远程登录

目录 一.简介 二.配置root账号 三、配置IP地址 四、更换阿里云源 五、配置ssh&#xff0c;root可以远程登录安装ssh服务 VMware17.0安装教程(2023最新最详细)-CSDN博客 VMware虚拟机安装Ubuntu22.04教程&#xff08;2023最新最详细&#xff09;-CSDN博客 Ubuntu22.04&am…

JSX 中使用 js 表达式

学习目标&#xff1a; 能够在 JSX 中使用表达式 语法&#xff1a; {JS 表达式} function App() {// 1.识别常规变量const name 跟着老惠学前端// 2.原生js方法调用const age () > {return 25}//3.三元运算符const flag truereturn (<div className"App">…

webpack前端性能优化的操作有哪些?

一、背景 随着前端的项目逐渐扩大&#xff0c;必然会带来的一个问题就是性能 尤其在大型复杂的项目中&#xff0c;前端业务可能因为一个小小的数据依赖&#xff0c;导致整个页面卡顿甚至奔溃 一般项目在完成后&#xff0c;会通过webpack进行打包&#xff0c;利用webpack对前…

【算法|滑动窗口No.2】leetcode904. 水果成篮

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…

信号继电器驱动芯片(led驱动芯片)

驱动继电器需要配合BAV99&#xff08;防止反向脉冲&#xff09;使用 具体应用参考开源项目 电阻箱 sbstnh/programmable_precision_resistor: A SCPI programmable precision resistor (github.com) 这个是芯片的输出电流设置 对应到上面的实际开源项目其设置电阻为1.5K&…

【SA8295P 源码分析】111 - 使用 Infineon 工具升级DHU 的MCU 固件过程指导

【SA8295P 源码分析】111 - 使用 Infineon 工具升级DHU 的MCU 固件过程指导 系列文章汇总见:《【SA8295P 源码分析】00 - 系列文章链接汇总》 本文链接:《【SA8295P 源码分析】111 - 使用 Infineon 工具升级DHU 的MCU 固件过程指导》 打开 Infineon 工具 默认是没有工程的,需…

Unity之ShaderGraph如何实现全息投影效果

前言 今天我们来实现一个全息投影的效果&#xff0c;如下所示&#xff1a; 主要节点 Position&#xff1a;提供对网格顶点或片段的Position 的访问&#xff0c;具体取决于节点所属图形部分的有效着色器阶段。使用Space下拉参数选择输出值的坐标空间。 Time&#xff1a;提…

Cocos 系列教程 - 01 认识项目结构

(一)项目文件夹结构 初次创建并打开一个 Cocos Creator 项目后,开发者项目文件夹的结构如下: assets:资源目录 build:构建目录(在构建某平台后会生成该目录) library:导入的资源目录 local:日志文件目录 profiles:编辑器配置 temp:临时文件目录 package.js…

Java面向对象(基础)-- 类的成员之三:构造器(Constructor)

文章目录 一、介绍&#xff08;1&#xff09;理解和作用&#xff08;2&#xff09; 构造器的语法格式 二、举例剖析&#xff08;1&#xff09;构造器在哪&#xff08;2&#xff09;权限问题&#xff08;3&#xff09;声明构造器&#xff08;4&#xff09;声明多个构造器&#x…

shell-mysql备份通用脚本

代码&#xff1a; #!/bin/bash#这是一个mysql备份的通用脚本 #颜色设置 RED\E[1;31m GREEN\E[1;32m RES\E[0m#mysql备份参数 DB_USER"root" DB_PASSWORD"123456" DB_HOST"127.0.0.1" DB_NAME"docker" BACKUP_DIR"/mysql/backup/…

多线程与高并发

1.线程创建的3种方式 2.线程的状态切换步骤 3.线程的5中状态 Java中的线程的生命周期大体可分为5种状态。 1. 新建(NEW)&#xff1a;新创建了一个线程对象。 2. 可运行(RUNNABLE)&#xff1a;线程对象创建后&#xff0c;其他线程(比如main线程&#xff09;调用了该对象的sta…

MySQL1:MySQL发展史,MySQL流行分支及其对应存储引擎,MySQL中一条查询SQL语句是如何执行的?MySQL中一条更新SQL是如何执行的?

MySQL1&#xff1a;MySQL发展史&#xff0c;MySQL流行分支及其对应存储引擎&#xff0c;一条查询SQL语句是如何执行的&#xff1f;一条更新SQL是如何执行的&#xff1f; MySQL发展史MySQL流行分支及其对应存储引擎MariaDB-Maria存储引擎Percona Server-XtraDB存储引擎其它存储引…