知问前端——Ajax登录
本文,将使用Ajax登录。
一、服务器端代码
is_user.php:
<?php
require 'config.php'; $query = mysql_query("SELECT name FROM user WHERE name='{$_POST['user']}'")
or die('SQL 错误!'); if (mysql_fetch_array($query, MYSQL_ASSOC)) {
echo 'false';
} else {
echo 'true';
} mysql_close();
?>
login.php:
<?php
require 'config.php'; $_pass = sha1($_POST['login_pass']); $query = mysql_query("SELECT name,pass FROM user WHERE
name='{$_POST['login_user']}' AND pass='{$_pass}'") or die('SQL 错误!'); if (mysql_fetch_array($query, MYSQL_ASSOC)) {
echo 'true';
} else {
echo 'false';
} mysql_close();
?>
注意:jquery.validate.js插件获取时是以UTF-8无BOM格式编码的,而我们的php文件是以ANSI/UTF-8格式编码的,所以在部分环境下,要设置UTF8无BOM格式编码的,否则验证无法提醒。
二、登录部分的代码
html代码:
<form id="login" title="会员登录">
<ol class="login_error"></ol>
<p>
<label for="user">账号:</label>
<input type="text" name="login_user" class="text" id="login_user"></input>
<span class="star">*</span>
</p>
<p>
<label for="pass">密码:</label>
<input type="password" name="login_pass" class="text" id="login_pass"></input>
<span class="star">*</span>
</p>
<p>
<input type="checkbox" name="expires" id="expires" checked="checked"></input>
<label for="expires">登录后有效期一周</label>
</p>
</form>
jQuery代码:
//登录
$("#login_a").click(function() {
$("#login").dialog("open");
}); $("#login").dialog({
autoOpen:false,
modal:true,
resizable:false,
width:320,
height:240,
buttons:{
'登录':function() {
//alert($("#expires").is(":checked"));
$(this).submit();
}
}
}).validate({ //jquery.validate.js插件获取时是以UTF-8 无BOM格式编码的,而我们的php文件是以ANSI/UTF-8格式编码的 submitHandler:function(form) {
//alert("验证成功,准备提交中!");
$(form).ajaxSubmit({
url:"login.php",
type:"post",
beforeSubmit:function(formData,jqForm,options) {
//提交之前,将“数据正在交互中...”对话框打开
//打开之后,高度又默认增加了30,所以在初始化dialog时,height应-30,变为50
$("#loading").dialog("open"); //alert($("#reg").dialog("widget").html());
//alert($("#reg").dialog("widget").find("button").eq(0).html()); //<span class="ui-button-icon-primary ui-icon ui-icon-closethick"></span><span class="ui-button-text">Close</span>
//alert($("#reg").dialog("widget").find("button").eq(1).html()); //<span class="ui-button-text">提交</span>
$("#login").dialog("widget").find("button").eq(1).button("disable"); //禁用提交按钮
},
success:function(responseText,statusText) {
//alert(responseText); //新增成功,返回1
if(responseText) {
$("#login").dialog("widget").find("button").eq(1).button("enable");
$("#loading").css("background","url(img/success.gif) no-repeat 20px center").html("用户登录成功..."); //登录后有效期一周复选框被选中
//就设置cookie的过期时间为7天
if($("#expires").is(":checked")) {
$.cookie("user", $("#login_user").val(),{
expires:7
});
} else {
$.cookie("user", $("#login_user").val());
} setTimeout(function() {
$("#loading").dialog("close");
$("#login").dialog("close");
$("#login").resetForm(); //重置表单
$("#login span.star").html("*").removeClass("succ");
$("#loading").css("background","url(img/loading.gif) no-repeat 20px center").html("数据交互中..."); $("#member, #logout").show();
$("#reg_a, #login_a").hide();
$("#member").html($.cookie("user"));
}, 1000);
}
}
});
},
//错误提示出现,对话框高度增加,出现滚动条,所以应去除滚动条
//每次激活错误,都会触发此属性
showErrors:function(errorMap, errorList) {
var errors = this.numberOfInvalids();
if(errors > 0) {
$("#login").dialog("option","height",errors * 20 + 240);
} else {
$("#login").dialog("option","height",240);
}
this.defaultShowErrors(); //执行默认错误
},
//高亮显示有错误的元素,变色式
highlight:function(element,errorClass) {
$(element).css("border","1px solid #630");
$(element).parent().find("span").html("*").removeClass("succ");
},
//恢复默认
unhighlight:function(element,errorClass) {
$(element).css("border","1px solid #ccc");
//element即为<input>控件
//$(element).parent().find("span").html("ok");
$(element).parent().find("span").html(" ").addClass("succ");
},
errorLabelContainer:"ol.login_error",
wrapper:"li",
rules:{
login_user:{
required:true,
minlength:2,
},
login_pass:{
required:true,
minlength:6,
remote:{
url:"login.php",
type:"post",
data:{
login_user:function() {
return $("#login_user").val();
}
}
}
}
},
messages:{
login_user:{
required:"账号不得为空!",
minlength:"账号不得小于{0}位!",
},
login_pass:{
required:"密码不得为空!",
minlength:"密码不得小于{0}位!",
remote:"账号或密码不正确!"
}
}
});
知问前端——Ajax登录的更多相关文章
- 知问前端——Ajax提交表单
本文,运用两大表单插件,完成数据表新增的工作. 一.创建数据库 创建一个数据库,名称为:zhiwen,表——user表,字段依次为:id.name.pass.email.sex.birthday.da ...
- 知问前端——Ajax表单插件
传统的表单提交,需要多次跳转页面,极大的消耗资源也缺乏良好的用户体验.而这款form.js表单的Ajax提交插件将解决这个问题. 一.核心方法 官方网站:http://malsup.com/jquer ...
- 知问前端--Ajax
本节课主要是创建一个问题表,将提问数据通过 ajax 方式提交出去.然后对内容显示进行布局,实现内容部分隐藏和完整显示的功能. 一.Ajax 提问创建一个数据表:question,分别建立:id.ti ...
- 第一百八十七节,jQuery,知问前端--cookie 插件,注册成功后生成cookie,显示登录状态
jQuery,知问前端--cookie 插件 学习要点: 1.使用 cookie 插件 2.注册直接登录 Cookie 是网站用来在客户端保存识别用户的一种小文件.一般来用库可以保存用户登 录信息.购 ...
- 知问前端——对话框UI(一)
对话框(dialog),是jQuery UI非常重要的一个功能.它彻底的代替了JavaScript的alert().prompt()等方法,也避免了新窗口或页面的繁杂冗余. 开启多个dialog 我们 ...
- 第一百八十三节,jQuery-UI,知问前端--验证插件
jQuery-UI,知问前端--验证插件 学习要点: 1.使用 validate.js 插件 2.默认验证规则 3.validate()方法和选项 4.validate.js 其他功能 验证插件(va ...
- 知问前端——创建header区
创建界面 我们首先要设计一个header,这个区域将要设计成永远置顶.也就是,往下拉出滚动条也永远在页面最上层可视区内.在header区,目前先设计LOGO.搜索框.按钮.注册和登录即可. 项目的大致 ...
- 知问前端——cookie插件
Cookie是网站用来在客户端保存识别用户的一种小文件.一般可以保存用户登录信息.购物数据信息等一系列微小信息. 一.使用cookie插件 官方网站:http://plugins.jquery.com ...
- 知问前端——日历UI(三)
datepicker日期选择选项 属性 默认值/类型 说明 minDate 无/对象.字符串或数值 日历中可以选择的最小日期 maxDate 无/对象.字符串或数值 日历中可以选择的最大日期 defa ...
随机推荐
- Unity3D 入门 - 工作区域介绍 与 入门示例
一. 工作区域详解 1. Scence视图 (场景设计面板) scence视图简介 : 展示创建的游戏对象, 可以对所有的游戏对象进行 移动, 操作 和 放置; -- 示例 : 创建一个球体, 控制摄 ...
- PHP 签到,与时间获取,数组长度获取
本文实例讲述了php实现签到功能的方法.分享给大家供大家参考,具体如下:首先我在数据库里建了两张表,一个是用户的积分表,一个是签到状态表,分来用来记录用户的积分数和先到状态 在用户签到状态表中我们有一 ...
- 搭建github
http://www.cnblogs.com/liuxianan/p/build-blog-website-by-hexo-github.html
- PokeCats开发者日志(九)
现在是PokeCats游戏开发的第十五天的中午,总算过了规范性检查这一关. 但愿能过吧.
- (转)NEST.net Client For Elasticsearch简单应用
由于最近的一个项目中的搜索部分要用到 Elasticsearch 来实现搜索功能,苦于英文差及该方面的系统性资料不好找,在实现时碰到了不少问题,现把整个处理过程的代码分享下,给同样摸索的人一些借鉴,同 ...
- BZOJ 1296 粉刷匠(分组背包套DP)
刚开始往网络流的方向想.建不出图... 因为每次只能对一行进行染色.每一行都是独立的. 对于每一行,因为格子只能染一次,所以可以发现这是一个多阶段决策问题,这个决策就是当前格子染0还是染1. 令dp[ ...
- SVG总结小知识
SVG:可缩放矢量图形.全称是:Scalable Vector Graphics SVG使用 XML 格式定义图像. SVG是使用 XML 来描述(二维图形和绘图)程序的语言. SVG是W3C ...
- Python 源码剖析(六)【内存管理机制】
六.内存管理机制 1.内存管理架构 2.小块空间的内存池 3.循环引用的垃圾收集 4.python中的垃圾收集 1.内存管理架构 Python内存管理机制有两套实现,由编译符号PYMALLOC_DEB ...
- Python替换字符串中的反斜杠\
s = 'cdp\nd' result = eval(repr(s).replace('\\', '@')) print(result) repr() 函数可以将字符串转换为python的原始字符串( ...
- 进程间通讯-2(pipe)
通过pipe 管道的方式也可以实现进程间通信. 父进程和子进程之间可以实现相互通信. from multiprocessing import Process, Pipe def f(conn): co ...