`

业务密码校验,AJAX异步校验时间有诧异

阅读更多

在项目中我使用了AJAX异步校验,来校验业务密码是否正确,本地环境下没有问题,但拉到真实环境,杭州服务器出现问题,给input框的blur()事件加了异步校验,点击保存按钮让所以input框失去焦点,业务密码正确,即可以通过,但是由于真实环境服务器返回数据的时间不一定,所以出现没返回数据那,就已经提交了表单。

 

#我的代码

<script type="text/javascript">
$(document).ready(function(){
	var empAlterReason = true;
	var checkPassword2 = true;
		
	/*业务密码*/
	$("#password2").blur(function(){
		var password2 = $("#password2").val();
		var textPassword2 = $("#textPassword2");
		textPassword2.html("");
		
		if( password2=='' )
		{
			textPassword2.html("<font color='red'>业务密码不能为空!</font>");
			checkPassword2 = false;
			return;
		}
		if( password2!='' )
		{
			if( passValidate(password2) )
			{
				textPassword2.html("<font color='red'>业务密码格式有误!</font>");
				checkPassword2 = false;
				return;
			}
			else
			{
				var yz=$.ajax({
					type:'post',
					url:'validatePwd2_checkPwd2?password2='+password2,
					data:{},
					cache:false,
					dataType:'json',
					success:function(data){
						if( data.msg =="false" ) //服务器返回false,就将validatePassword2的值改为pwd2Error,这是异步,需要考虑返回时间
						{
							textPassword2.html("<font color='red'>业务密码不正确!</font>");
							$("#validatePassword2").val("pwd2Error");
							checkPassword2 = false;
							return;
						}
					},
					error:function(){}
				});
			}
		}
		$("#validatePassword2").val("pwd2Success");
		checkPassword2 = true;
		return;
	});

	/*修改原因*/
	$("#alterReason").blur(function(){
		var textRoleAlterReason = $("#textRoleAlterReason");
		textRoleAlterReason.html("");
		var alterReason = $("#alterReason").val();
		if(alterReason=='')
		{
			textRoleAlterReason.html("<font color='red'><br>修改原因不能为空!</font>");
			empAlterReason = false;
			return;
		}
		if(alterReason=='请输入')
		{
			textRoleAlterReason.html("<font color='red'><br>修改原因必填项!</font>");
			empAlterReason = false;
			return;
		}
		if(illegalChar(alterReason))
		{
			textRoleAlterReason.html("<font color='red'><br>修改原因不能包含非法字符!</font>");
			empAlterReason = false;
			return;
		}
		empAlterReason = true;
		return;
	});
	
	/*保存,点击事件*/
	$("#mybutton1").click(function(){
		var validatePassword2 = $("#validatePassword2").val();
		$("input,textarea").blur();//这里触发焦点事件,但是服务器还没返回值,validatePassword2的值还没改变,还是'pwd2Success',但是代码还是按照顺序执行,所以下面的query()方法还是执行了
		if(validatePassword2=='pwd2Success' && checkPassword2==true && empAlterReason == true){
			query();
		}
	});
});

	function resetForm()
	{
		$("#alterReason").val("");
		$("#password2").val("");
		$("#textPassword2").html("");
		$("#textRoleAlterReason").html("");
	}


	function calBack(){
		history.back(-1);
	}
  	
	function query() {
		if(document.getElementById('roleName').value  == ""){alert('角色名称不能为空!'); return false;}else{ }
		if(document.getElementById('alterReason').value  == ""){alert('授权原因不能为空!'); return false;}else{ }
		// 获得被授权的信息总数
		var len= document.getElementById("roleList").length;
		var tempop="";
	    for(var i=0;i<len;i++){
			tempop = tempop +";"+ document.getElementById("roleList").options[i].value;
	    }
	    
		var confirm = "您确定修改权限信息吗?";
		if(window.confirm(confirm)){
			document.getElementById('privSelect').value=tempop;
			document.form1.action = "<%=path%>/Role_impower";
			document.form1.submit();
			alert("操作成功!");
		}
	}
</script>

 

#jsp页面代码

	<tr>
		<td colspan="2" class="txtright" >业务密码:</td><td class="txtleft">
			<input type="password" name="password2" id="password2" maxlength="18" class="inputbox"/>
			<input type="hidden" id="validatePassword2" value="pwd2Success"/>
			<span id="textPassword2"></span>
		</td>
	</tr>    		
	
	<tr>
		<td colspan="2" class="txtright"></td><td class="txtleft">
			<input type="button" id="mybutton1" value="保  存" class="btn"/> &nbsp;&nbsp;&nbsp;&nbsp;
			<input type="button" value="重  置" onclick="resetForm()" class="btnalt"/>&nbsp;&nbsp;&nbsp;&nbsp;
			<input type="button" value="返  回" onclick="history.go(-1);" class="btnalt"/>
		</td>
	</tr>
	</table>
		</td>
	</tr>

 

#####注意:这问题本机、内网都没问题,因为速度很快,几乎不用考虑异步时间,但是真实服务器就不行了,返回响应时间可能会慢一些。。。  切记!!!

 

分享到:
评论

相关推荐

    异步校验jquery-ajax

    本工程有两种ajax异步校验注册时输入的username是否与数据库中的值重复,通过mybatis实现数据库,通过servlet或者struts2实现控制层,通过ajax,jquery,json,实现异步校验

    ajax的异步校验功能实现

    对于异步校验,我们可以利用jQuery的`$.ajax()`函数或者更简单的`$.get()`或`$.post()`方法。 下面是一个使用jQuery实现的用户名异步校验的基本步骤: 1. **事件监听**:我们需要监听用户的输入,例如当用户离开...

    Ajax 异步请求-校验用户名唯一性

    这可以通过Ajax异步请求来实现,无需用户等待整个页面刷新,提供更好的用户体验。 以下是一般的步骤: 1. **前端视图(View)**:在HTML表单中,我们添加一个事件监听器,如`onkeyup`或`onblur`,当用户在用户名...

    用户名校验(ajax技术)

    Ajax的核心是利用JavaScript与服务器进行异步数据交换,增强了用户体验,使得页面交互更加流畅。本教程主要针对初学者,讲解如何使用Ajax进行简单的用户名校验。 一、Ajax基础 Ajax的核心组件包括XMLHttpRequest...

    jquery ajax 异步验证

    ### jQuery AJAX 异步验证详解 #### 一、AJAX概念与原理 ##### 1.1 定义与历史背景 - **定义**: AJAX(Asynchronous JavaScript and XML)是一种使用JavaScript进行异步通信的技术,它使得网页可以在不重新加载...

    图文验证码(Ajax异步校验)-源码出自明日科技

    【图文验证码(Ajax异步校验)】是一种常见的网络安全机制,用于防止自动化程序(如机器人)非法操作网站,如注册、登录或提交表单。在本项目中,明日科技提供了完整的源码实现,旨在帮助开发者理解和应用此类验证码...

    案例_Ajax_用户名异步校验 源代码

    本案例“案例_Ajax_用户名异步校验”是关于如何利用Ajax实现一个实时验证用户输入用户名是否可用的功能,它可以帮助提高用户体验,减少不必要的等待时间。以下是关于这个主题的详细知识点: 1. **Ajax基本原理**: ...

    ajax实现二级下拉框和用户名校验

    Ajax可以在此场景中发挥作用,通过在用户输入时或输入结束后立即发送校验请求,而不必等待用户提交表单。 **实现步骤:** 1. 创建一个HTML输入框,用于用户输入用户名。 2. 使用JavaScript(可能结合事件委托)监听...

    javascript将异步校验表单改写为同步表单.docx

    然而,异步校验也有其局限性和问题,例如: - **网络延迟**:在网络条件不佳的情况下,异步请求可能会导致用户等待时间过长。 - **用户体验**:如果异步校验失败,用户可能需要多次尝试才能成功提交表单。 - **代码...

    jquery easyUI中ajax异步校验用户名

    首先,要实现jquery easyUI中ajax异步校验用户名,需要对jquery及jquery easyUI有一定的了解。在前端页面中引入jquery.js和jquery.easyui.min.js这两个基本的js文件,以及对应的样式文件easyui.css和icon.css。然后...

    使用AJAX完成用户名是否存在异步校验

    使用AJAX完成用户名是否存在异步校验: 1.事件触发: * onblur 2.编写AJAX代码: * 项Action中提交:传递username参数 3.编写Action * 接收username:模型驱动接收. 4.* 编写实体类 * User * User.hbm.xml * 配置到spring...

    图片上传下载ajax异步操作前后台代码-demo

    本示例"图片上传下载ajax异步操作前后台代码-demo"提供了完整的解决方案,允许用户通过Ajax技术实现图片的上传和下载,同时包含了对手机号码、身份证等常见输入的验证。以下是关于这个项目的详细知识点: 1. **Ajax...

    ajax校验

    3. **异步验证的优化**:避免频繁的Ajax请求,可以设置延迟(debounce)或节流(throttle)来控制请求频率。 4. **前后端联动验证**:虽然前端验证可以提高用户体验,但安全起见,后端也需要进行同样的验证,防止...

    异步表单验证

    arr[0].posturl("/FormValidation/ajax/ajax-validation.asmx/user_isNull", "name"); arr[0].check("tname", "td1", "checkusername", true, true); //密码验证 arr[1] = new XQValidation(); arr[1]....

    Ajax异步提交判断用户名是否可用

    2. **异步提交**:Ajax的优势在于异步性,这意味着页面不会因为等待服务器响应而冻结。当用户输入用户名并点击检查按钮时,JavaScript会启动一个异步请求,同时用户可以继续在页面上进行其他操作。 3. **发送请求**...

    jquery的ajax校验.zip

    6. **异步校验**:对于复杂校验,可能需要异步调用API或服务来验证数据,如检查用户名是否已存在。这时,可以利用`$.ajax()`或`$.getJSON()`发起异步请求,并在回调中处理结果。 7. **插件和库**:jQuery社区提供了...

    使用 jQuery Ajax 异步登录,并验证用户输入信息(maven)

    使用 jQuery Ajax 异步登录,并验证用户输入信息(maven),图文教程地址:https://blog.csdn.net/qq_40147863/article/details/85999375

    S2SH+jQuery+JSON+Ajax注册--异步校验

    标题 "S2SH+jQuery+JSON+Ajax注册--异步校验" 提及的技术栈主要包含四个关键部分:Struts2 (S2),Spring,Hibernate(SSH)这三大企业级开发框架,以及jQuery、JSON和Ajax这三者组成的前端交互技术。这篇博客文章...

    利用Ajax实现无刷新验证用户名和密码是否正确

    "利用Ajax实现无刷新验证用户名和密码是否正确"这一技术就是为了让用户在输入登录信息时能够得到即时反馈,无需等待页面整体刷新,极大地提升了交互体验。Ajax(Asynchronous JavaScript and XML)是一种创建动态...

Global site tag (gtag.js) - Google Analytics