Ajax非同步方式實現登入與引數的校驗
登入程式碼
這個是使用Bootstrap3的元件功能實現的
<div class="login_con_R">
<h4>登入</h4>
<FORM id="loginFormId" class="form-horizontal" action="login" method="post">
<div class="form-group input-group">
<span class="input-group-addon" ><span class="glyphicon glyphicon-user"></span></span>
<input type="text" class="form-control" placeholder="使用者名稱" name="username" id="j_username" value="koala">
</div>
<div class="form-group input-group">
<span class ="input-group-addon"><span class="glyphicon glyphicon-lock"></span></span>
<input type="password" name="password" id="j_password" class="form-control" placeholder="密碼" value="888888"/>
</div>
<div class ="form-group input-group" style="margin-top: 45px;">
<button type="button" class="btn btn-primary btn-block" id="loginBtn">登入</button>
</div>
</FORM>
</div>
非同步登入請求的程式碼
<script>
$(function(){
var btnLogin = $('#loginBtn');
var form = $('#loginFormId');
$('body').keydown(function(e) {
if (e.keyCode == 13) {
dologin();
}
});
btnLogin.on('click',function() {
dologin();
});
var dologin = function() {
var userNameElement = $("#j_username");
var passwordElement = $("#j_password");
var username = userNameElement.val();
var password = passwordElement.val();
if (!Validation.notNull($('body'), userNameElement, username, '使用者名稱不能為空')) {
return false;
}
if (!Validation.notNull($('body'), passwordElement, password, '密碼不能為空')) {
return false;
}
btnLogin.attr('disabled', 'disabled').html('正在登入...');
var param = form.serialize();
$.ajax({
url: contextPath+"/login.koala",
dataType: "json",
data: param,
type: "POST",
success: function(data){
if(data.success){
$('.login_con_R').message({
type: 'success',
content: '登入成功!'
});
/*這裡使用的非同步請求,當請求登入成功的時候,重新定位到index介面*/
window.location.href=contextPath+"/index.koala";
}else{
btnLogin.removeAttr('disabled').html('登入');
$('.login_con_R').message({
type: 'error',
content: data.errorMessage
});
}
}
});
};
});
</script>
使用到的驗證js程式碼Validation.js
Validator = {
Require : {expression:/.+/,errorMsg:"該欄位不能為空"},
Email : {expression:/^\w+([-+.]\w+)*@\w+([-.]\\w+)*\.\w+([-.]\w+)*$/,errorMsg:"Email格式不正確"},
Mobile:{expression:/^(1[3|5|8]{1}\d{9})$/,errorMsg:"手機格式不正確"},
TelePhone:{expression:/^(((0\d{2,3}-)?\d{7,8}(-\d{4})?))$/,errorMsg:"電話號碼格式不正確"},
IdCard:{expression:/^\d{15}(\d{2}[A-Za-z0-9])?$/,errorMsg:"身份證號碼格式不正確"},
Number:{expression:/^-?(\d+|[1-9]\d*\.\d+|0\.\d*[1-9]\d*|0?\.0+|0)$/,errorMsg:"僅支援數字"},
English:{expression:/^[A-Za-z]+$/,errorMsg:"僅支援英文字元"},
Chinese:{expression:/^[\u0391-\uFFE5]+$/,errorMsg:"僅支援中文字元"},
URL:{expression:/^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/,errorMsg:"URL地址格式不正確"},
Regex:{errorMsg:"格式不正確"},
UnSafe : /^(([A-Z]*|[a-z]*|\d*|[-_\[email protected]#\$%\^&\*\.\(\)\[\]\{\}<>\?\\\/\'\"]*)|.{0,5})$|\s/,
IsSafe : function(str){return !this.UnSafe.test(str);},
SafeString : {expression:"this.IsSafe(value)",errorMsg:"僅支援中文字元"},
ErrorItem : [document.forms[0]],
ErrorMessage : ["以下原因導致提交失敗:\t\t\t\t"],
Validate : function(theForm, mode){
var obj = theForm || event.srcElement;
var count = obj.elements.length;
this.ErrorMessage.length = 1;
this.ErrorItem.length = 1;
this.ErrorItem[0] = obj;
for(var i=0;i<count;i++){
with(obj.elements[i]){
if(disabled)continue;
var _dataType = getAttribute("dataType");
if(typeof(_dataType) == "object" || typeof(this[_dataType]) == "undefined") continue;
this.ClearState(obj.elements[i]);
if(getAttribute("require") == "false" && value == "") continue;
var errorMsg = getAttribute("errorMsg")? getAttribute("errorMsg") : this[_dataType].errorMsg;
errorMsg = errorMsg || "invalid";
var validateExpr = getAttribute("validateExpr");
validateExpr = validateExpr || this[_dataType].expression;
switch(_dataType){
case "Date" :
case "Repeat" :
case "Range" :
case "Compare" :
case "Custom" :
case "Group" :
case "Limit" :
case "LimitB" :
case "SafeString" :
if(!eval(validateExpr)) {
this.AddError(i, errorMsg);
}
break;
default :
if(!eval(validateExpr).test(value)){
this.AddError(i, errorMsg);
}
break;
}
}
}
if(this.ErrorMessage.length > 1){
var content = this.ErrorMessage[1].replace(/\d+:/," ");
var $element = $(this.ErrorItem[1]);
var name = $element.attr('name');
if(name.indexOf('DTO') != -1){
name = name.split('.')[1];
}
var $targetElement = $element;
var $tempElement = $targetElement.closest('form').find('#' + name + 'ID');
if($tempElement.hasClass('select')){
$targetElement = $tempElement;
}
showErrorMessage($element.closest('.modal'), $targetElement, content);
return false;
}
return true;
},
limit : function(len,min, max){
min = min || 0;
max = max || Number.MAX_VALUE;
return min <= len && len <= max;
},
LenB : function(str){
return str.replace(/[^\x00-\xff]/g,"**").length;
},
ClearState : function(elem){
with(elem){
if(style.color == "red")
style.color = "";
var ligertipid = getAttribute("ligertipid");
if(ligertipid && ligertipid != ""){
removeAttribute("ligertipid");
$(elem).ligerHideTip();
}
}
},
AddError : function(index, str){
this.ErrorItem[this.ErrorItem.length] = this.ErrorItem[0].elements[index];
this.ErrorMessage[this.ErrorMessage.length] = this.ErrorMessage.length + ":" + str;
},
Exec : function(op, reg){
return new RegExp(reg,"g").test(op);
},
compare : function(op1,operator,op2){
switch (operator) {
case "NotEqual":
return (op1 != op2);
case "GreaterThan":
return (op1 > op2);
case "GreaterThanEqual":
return (op1 >= op2);
case "LessThan":
return (op1 < op2);
case "LessThanEqual":
return (op1 <= op2);
default:
return (op1 == op2);
}
},
MustChecked : function(name, min, max){
var groups = document.getElementsByName(name);
var hasChecked = 0;
min = min || 1;
max = max || groups.length;
for(var i=groups.length-1;i>=0;i--)
if(groups[i].checked) hasChecked++;
return min <= hasChecked && hasChecked <= max;
},
IsDate : function(op, formatString){
formatString = formatString || "ymd";
var m, year, month, day;
switch(formatString){
case "ymd" :
m = op.match(new RegExp("^\\s*((\\d{4})|(\\d{2}))([-./])(\\d{1,2})\\4(\\d{1,2})\\s*$"));
if(m == null ) return false;
day = m[6];
month = m[5]--;
year = (m[2].length == 4) ? m[2] : GetFullYear(parseInt(m[3], 10));
break;
case "dmy" :
m = op.match(new RegExp("^\\s*(\\d{1,2})([-./])(\\d{1,2})\\2((\\d{4})|(\\d{2}))\\s*$"));
if(m == null ) return false;
day = m[1];
month = m[3]--;
year = (m[5].length == 4) ? m[5] : GetFullYear(parseInt(m[6], 10));
break;
default :
break;
}
var date = new Date(year, month, day);
return (typeof(date) == "object" && year == date.getFullYear() && month == date.getMonth() && day == date.getDate());
function GetFullYear(y){return ((y<30 ? "20" : "19") + y)|0;}
}
};
var Validation = {
notNull: function($container, $element, content, errorMessage) {
if (isNull(content)) {
showErrorMessage($container, $element, errorMessage);
return false;
}
return true;
},
email: function($container, $element, content, errorMessage) {
var reg = new RegExp(/^(\w)+(\.\w+)*@(\w)+((\.\w{2,3}){1,3})$/);
if (!reg.test(content)) {
showErrorMessage($container, $element, errorMessage);
return false;
}
return true;
},
serialNmuber: function($container, $element, content, errorMessage) {
var reg = new RegExp(/^[0-9a-zA-Z_-]*$/);
if (!reg.test(content)) {
showErrorMessage($container, $element, errorMessage);
return false;
}
return true;
},
number: function($container, $element, content, errorMessage) {
var reg = new RegExp(/^[0-9]*$/);
if (!reg.test(content)) {
showErrorMessage($container, $element, errorMessage);
return false;
}
return true;
},
humanName: function($container, $element, content, errorMessage) {
var reg = new RegExp(/(^[A-Z a-z]*$)|(^[\u4e00-\u9fa5]*$)/);
if (!reg.test(content)) {
showErrorMessage($container, $element, errorMessage);
return false;
}
return true;
},
checkByRegExp: function($container, $element, regExp, content, errorMessage){
var reg = new RegExp(regExp);
if (!reg.test(content)) {
showErrorMessage($container, $element, errorMessage);
return false;
}
return true;
}
};
/**
* 檢查是否為空
*/
var isNull = function(item){
if(item == null || item == "" || item.replace(/(^\s*)|(\s*$)/g, "") == "" ){
return true;
}
return false;
};
/**
* 顯示提示資訊
*/
var showErrorMessage = function($container, $element, content){
$element.popover({
content: content,
trigger: 'manual',
container: $container
}).popover('show').on({
'blur': function(){
$element.popover('destroy');
$element.parent().removeClass('has-error');
},
'keydown': function(){
$element.popover('destroy');
$element.parent().removeClass('has-error');
}
}).focus().parent().addClass('has-error');
};
相關推薦
Ajax非同步方式實現登入與引數的校驗
登入程式碼 這個是使用Bootstrap3的元件功能實現的 <div class="login_con_R"> <h4>登入</h4> <FORM id="loginF
Spring Validation最佳實踐及其實現原理,引數校驗沒那麼簡單!
之前也寫過一篇關於`Spring Validation`使用的文章,不過自我感覺還是浮於表面,本次打算徹底搞懂`Spring Validation`。本文會詳細介紹`Spring Validation`各種場景下的最佳實踐及其實現原理,死磕到底! 專案原始碼:[spring-validation](https
力所能及之springmvc+ajax+jquery+json實現登入非同步校驗使用者名稱是否存在
小狼最近在想能不能用springmvc實現後臺非同步校驗 開發環境:windows7純淨版 myeclipse8.6 jquery-1.3.2 需要jar檔案 : 工
Vue 元件引數校驗與非 props 特性
元件的引數校驗:父元件通過屬性傳遞給子元件資料,子元件有權對這些資料進行約束,這就是引數校驗。 如下,簡單的引數校驗。 <div id="root"> <child content="hello world"></child> <!-- 下
使用Jmeter的函式助手MD5加密實現登入的引數化
今天介紹一下使用Jmeter的函式助手__MD5加密實現登入的引數化 準備工作 在此之前,先要對使用Jmeter的函式助手實現引數的MD5加密進行了解,詳見另一篇博文: https://blog.csdn.net/qq_28863851/article/details/8477695
ajax+springboot+mybits實現登入註冊功能
html程式碼 使用者名稱:<input type="text" placeholder="使用者名稱” id="form-username"> 密碼:<input type="password" placeholder="密碼" id
Vue之元件引數校驗與非props特性
子元件對父元件傳遞資料的校驗: 何為校驗:就是對父元件傳遞的資料進行一定的限制。比如我子元件只接收字串型別資料。其他不要等等。 (如果資料型別不符合。Vue會在控制檯丟擲警告。) 一下是資料可以為數字型別或者字串型別的寫法。以陣列的形式: 資料型別的其他寫法。
Fragment學習之使用介面回撥的方式實現Fragment與Activity通訊
Fragment與Fragment之間可以進行資訊傳遞,同樣,Fragment與Activity也可以進行資訊的傳遞。 下面是一個演示在Activity中獲取來自Fragment的資訊,使用介面回撥的方法在Activity中接收資訊 MainActivity.java:
例項詳解js實現登入與註冊介面
本文主要為大家詳細介紹了js實現登入與註冊介面,具有一定的參考價值,感興趣的小夥伴們可以參考一下,希望能幫助到大家。 完成登入與註冊頁面的HTML+CSS+JS,其中的輸入項檢查包括: 使用者名稱6-12位 首字母不能是數字 只能包含字母和數字
ajax非同步載入 實現區域性重新整理
這是用jquery進行資料互動<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-2.1.0.js"></script> <scri
java註解方式引數校驗
1、註解類NotEmpty.java空值校驗 package com.cmbc.umm.core.common.annotation; import java.lang.annotation.Documented; import java.lang.an
springmvc+shiro+maven 實現登入與許可權授權
[java] view plain copy print?<!– 配置shiro的核心攔截器 –> <filter> <filter-name>shiroFilter</filter-name> <f
SpringBoot/SpringMVC整合Shiro:實現登入與註冊(MD5加鹽加密)
本文轉載於:https://blog.csdn.net/Colton_Null/article/details/78992836 ----------------------------------超級囂張的分割線---------------------------------------
關於怎麼解決從ajax傳入的json引數注入到Controller的接收物件 以及如何在Spring Boot專案使用引數校驗
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <tit
簡單易用的引數校驗和版本校驗方式(java)
步驟是:配置資料校驗規則(多條)>>>>在控制器上新增校驗註解>>>>使用攔截器攔截校驗引數(獲取註解,初始化校驗規則(第一次),取出引數) 我的專案中使用的MVC框架為Jfinal框架,其他框架也適用只需要將攔截器部分修改即
Java三種方式實現傳送xml引數的WebService介面呼叫
專案開發中與第三方系統資料對接遇到的問題,僅用作記錄。 1.使用cxf呼叫(聯調時沒有收到響應資訊) JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance(); lo
react +webpack+express router實現登入與頁面跳轉
5、express app 利用passport實現登入驗證與跳轉 var express = require('express'); var app= express(); var passport = require('passport'); var Strategy = require('passp
android 非同步方式實現資料載入
使用AsyncTask實現非同步處理 由於主執行緒(也可叫UI執行緒)負責處理使用者輸入事件(點選按鈕、觸控式螢幕幕、按鍵等),如果主執行緒被阻塞,應用就會報ANR錯誤。為了不阻塞主執行緒,我們需要在子執行緒中處理耗時的操作,在處理耗時操作的過程中,子執行緒可能需要更
Ajax非同步檔案上傳與NodeJS express服務端處理
為了避免在實現簡單的非同步檔案上傳功能時候引入一個第三方庫檔案的尷尬情形(庫檔案可能造成多餘的開銷,拉低應用載入速度,尤其是在引入庫檔案之後僅使用其中一兩個功能的情況下,價效比極低),最近了解了一下檔案非同步上傳的實現原理,順帶看了看進度條、圖片預覽等功能的實現
使用FormData物件ajax非同步方式上傳圖片,檔案
HTML程式碼 <div id="uploadForm"> <input id="file" type="file"/> <button id="upload" type="button">upload</butto