简单验证码实现(Ajax)
前端页面:
<!--验证码输入框 -->
<input type="text" class="entry" value="" placeholder="请输入短信验证码" id="u_code" autocomplete="off">
<!--获取验证码的按钮 -->
<input type="button" id="smsBtn" class="obtain" value="获取验证码" onclick="getRandNum(this);">
<!-- 服务器返回的验证码隐藏域 -->
<input type="hidden" name="randNum" id="randNum" value="" /> <a class="land" onclick="safeLogin()">确认登陆</a>
JS发送AJAX请求发送验证码:
获取到服务器响应后更新页面的隐藏域,在用户提交表单的时候可以此判断验证码是否输入正确。
<script>
var wait=0; function getRandNum(){
var photo = "${safePhone }";
var auId = "${auId }" ;
//alert(photo);
var xmlHttp = null;
//表示当前浏览器不是ie,如ns,firefox
if(window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
} else if(window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlHttp.onreadystatechange=function()
{
if (xmlHttp.readyState==4 && xmlHttp.status==200)
{
alert("验证码发送成功,请注意查收");
document.getElementById("randNum").value=xmlHttp.responseText;
wait=60;
var smsBtn = document.getElementById("smsBtn");
time(smsBtn);
}
}
xmlHttp.open("GET","${basePath }login/sendSmsCode.action?phone="+photo+"&auId="+auId,true);
xmlHttp.send(); } //计时
function time(o) {
if (wait == 0) {
o.removeAttribute("disabled");
//o.setAttribute("disabled", false);
o.value="获取验证码";
wait = 60;
document.getElementById("randNum").value="";
} else {
o.setAttribute("disabled", true);
o.value="已发(" + wait + "s)";
wait--;
setTimeout(function() {time(o)},1000);
}
} function safeLogin(){
var u_code = document.getElementById("u_code").value;
var s_code = document.getElementById("randNum").value;
//alert(u_code);
if(u_code==""){
alert("验证码不能为空!");
return false ;
}
if(u_code!=s_code){
alert("验证码输入不正确,请输入正确验证码!");
return false ;
} var safeLoginFrm = document.getElementById("safeLoginFrm");
safeLoginFrm.submit();
} </script>
服务器端ACTION:
/*
* 发送短信验证码
*/
public void sendSmsCode() {
HttpServletResponse response = ServletActionContext.getResponse(); // 产生6位随机数字
Random r = new Random();
String randNum = "";
for (int i = 0; i < 6; i++) {
randNum += r.nextInt(10);
}
String content = "【验证码】" + randNum + "(后台安全登陆验证码,一分钟内有效)";
// 发送短信begin:
Map<String, String> sendMap = SendSmsMessage
.sendMessage(content, phone);
Integer sms_code = Integer.parseInt(sendMap.get("Code"));
String sms_result = sendMap.get("Result");
// 发送短信end try {
PrintWriter writer = response.getWriter();
writer.print(randNum);
writer.flush();
writer.close();
} catch (Exception e) {
e.printStackTrace();
} }
上面简单实现了验证码功能,也算是一个AJAX的一个实例。
简单验证码实现(Ajax)的更多相关文章
- php生成动态验证码 加减算法验证码 简单验证码
预览效果: <?php /** *ImageCode 生成包含验证码的GIF图片的函数 *@param $string 字符串 *@param $width 宽度 *@param $height ...
- 简单验证码识别(matlab)
简单验证码识别(matlab) 验证码识别, matlab 昨天晚上一个朋友给我发了一些验证码的图片,希望能有一个自动识别的程序. 1474529971027.jpg 我看了看这些样本,发现都是很规则 ...
- 用imagemagick和tesseract-ocr破解简单验证码
用imagemagick和tesseract-ocr破解简单验证码 Tesseract-ocr据说辨识程度是世界排名第三,可谓神器啊. 准备工作: 1.安装tesseract-ocr sudo apt ...
- php笔记之GD库图片创建/简单验证码
燕十八 公益PHP培训 课堂地址:YY频道88354001 学习社区:www.zixue.it php画图:比如说验证码,缩略图,加水印都要用到GD库,所以要开启gd2库,才能用 首先找到php.in ...
- 开发工具类API调用的代码示例合集:六位图片验证码生成、四位图片验证码生成、简单验证码识别等
以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 六位图片验证码生成:包括纯数字.小写字母.大写字母.大小写混合.数 ...
- js简单验证码的生成和验证
如何用js生成简单验证码,并验证是否正确的方法 1.html页面如下 <div> <table border="0" cellspacing="5&qu ...
- 基于ajax 的 几个例子 session ,ajax 实现登录,验证码 ,实现ajax表单展示
headers: {"X-CSRFToken": $("[name='csrfmiddlewaretoken']").val()},data:$(". ...
- php实现简单验证码的功能
php实现简单验证码的功能 <!DOCTYPE html> <html> <head lang="en"> <meta charset=& ...
- python简单验证码识别
在学习python通过接口自动登录网站时,用户名密码.cookies.headers都好解决但是在碰到验证码这个时就有点棘手了:于是通过网上看贴,看官网完成了对简单验证码的识别,如果是复杂的请看大神的 ...
随机推荐
- boot loader:grub入门[转]
Boot Loader: Grub 在看完了前面的整个启动流程,以及核心模块的整理之后,你应该会发现到一件事情, 那就是『 boot loader 是加载核心的重要工具』啊!没有 boot loade ...
- springmvc权限过滤器
package com.zbb.cn.filter; import java.io.PrintWriter; import javax.servlet.http.HttpServletRequest; ...
- JavaScript 装逼指南
Summary 本文秉承着 你看不懂是你sb,我写的代码就要牛逼 的理念来介绍一些js的装逼技巧. 下面的技巧,后三个,请谨慎用于团队项目中(主要考虑到可读性的问题),不然,leader 干你没商量. ...
- 解决TalbleView头部或底部子控件不显示问题
在自定义cell头部控件UITableViewHeaderFooterView(和自定义cell的方法几乎一样)时,出现了头部控件子控件不显示的问题. 注意和自定义cell的区别. .h文件 #imp ...
- ORA-12154: TNS:could not resolve the connect identifier specified
场景: .Net程序无法连接到数据库 现象: 2015/8/26 11:02:03 ORA-12154: TNS:could not resolve the connect identifier sp ...
- 互斥锁(Mutex)
互斥锁(Mutex)互斥锁是一个互斥的同步对象,意味着同一时间有且仅有一个线程可以获取它.互斥锁可适用于一个共享资源每次只能被一个线程访问的情况 函数://创建一个处于未获取状态的互斥锁Public ...
- Linux查看系统资源使用情况(转)
概述: 用 'top -i' 看看有多少进程处于 Running 状态,可能系统存在内存或 I/O 瓶颈,用 free 看看系统内存使用情况,swap 是否被占用很多,用 iostat 看看 I/O ...
- [DFNews] EIFT更新至1.2,支持iPhone4s及iPhone5物理获取
俄罗斯厂商Elcomsoft近日更新了其旗下的iOS取证软件Elcomesoft iOS Forensic Toolkit,更新后的1.2版本支持针对iOS 4-6的iPhone 4s.iPhone5 ...
- JS中插入节点的方法appendChild和insertBefore的应用
1.appendChild() 方法:可以向节点的子节点列表的末尾添加新的子节点.比如:appendChild(newchild)括号里可以是创建的标签var newchild = document. ...
- (译)详解javascript立即执行函数表达式(IIFE)
写在前面 这是一篇译文,原文:Immediately-Invoked Function Expression (IIFE) 原文是一篇很经典的讲解IIFE的文章,很适合收藏.本文虽然是译文,但是直译的 ...