问题描述
困扰我了一个多星期了,小弟新手,求大神给个解决方案1,前台ui:两个textbox:RequestorAlias和RequestorName。两个dropdownlist:Region和Country要实现的功能是,在RequestorAlias的textbox里填写一个新的字符串,后台验证合法以后,联动的改变RequestorName的值。2,前台js代码的实现:functiontxtRequestorAlias_TextChanged(str){strFullPath=newString(window.document.location.href);strRequestorAlias=newString(document.getElementById('<%=txtRequestorAlias.ClientID%>').value);if(strRequestorAlias==''){document.getElementById('<%=aliasValaditionMessage.ClientID%>').innerText='*Pleaseenteravaliduseralias';}else{$.ajax({type:"Post",async:true,url:strFullPath+"/RequestorAlias_TextChanged",data:"{'str':'"+strRequestorAlias+"'}",contentType:"application/json;charset=utf-8",dataType:"json",success:function(data){//alert(data.d);if((data.d[1]==null)){document.getElementById('<%=txtRequestorAlias.ClientID%>').innerText='';document.getElementById('<%=aliasValaditionMessage.ClientID%>').innerText='*Pleaseenteravaliduseralias';}else{//若输入alias合法,联动修改各个textbox的值document.getElementById('<%=aliasValaditionMessage.ClientID%>').innerText='';document.getElementById('<%=txtRequestorName.ClientID%>').innerText=data.d[1]document.getElementById('<%=hd_managerAlias.ClientID%>').innerText=data.d[3]document.getElementById('<%=hd_businessGroup.ClientID%>').innerText=data.d[2]}},error:function(err){alert(err);}});}}3,后台webmethod的实现:[WebMethod]publicstaticstring[]RequestorAlias_TextChanged(stringstr){string[]userInfo=newstring[4];string[]userName=IATMethods.GetUserInfo(str);if(userName[1]!=null){userInfo=userName;}returnuserInfo;}我遇到的困扰:1,RequestorAlias框一旦被改变,就开始调用后台webmethod做验证,若通过,就联动改变RequestorName的值;2,问题在于,这个验证需要花费一定的时间1-2秒不等3,若是我修改完alias,鼠标离开什么都不做,等着相关验证完成——就不会有任何问题4,若是我修改完Alias后直接将鼠标移动到“Region”的list进行选择,这个操作会发出一个postback的指令让Country下拉框populate出相应的list。这种情况下,会出现这种issue:等1-2秒之后,RequestorName的值会显示正确的新name,然后一闪而过,重新显示原来的Name值。随后Country下拉框显示可选item。个人认为这是由于同步异步问题造成的,求告知怎么解决
解决方案
本帖最后由 zhshh521 于 2014-12-01 15:38:19 编辑
解决方案二:
想办法把联动用js脚本做,而不是每点一次下拉列表都要向服务器回发一次,效率太低了
解决方案三:
引用1楼Z65443344的回复:
想办法把联动用js脚本做,而不是每点一次下拉列表都要向服务器回发一次,效率太低了
我现在是在做这个系统维护,我的任务是让那个RequesorAlias框可编辑,并且异步验证。其他都不是我做的,我现在的时间也不允许我对整个系统大改。。。
解决方案四:
不改怕是没什么办法了如果之前做网站的人连ajax都没用,每点一次就整个页面都刷新,你不改还能有什么办法
解决方案五:
要么就先把所有控件都设置为不可用,等ajax完成刷新了,再重新设置为可用,避免脏数据
解决方案六:
引用4楼Z65443344的回复:
要么就先把所有控件都设置为不可用,等ajax完成刷新了,再重新设置为可用,避免脏数据
我是新手,我一直弄不明白,我对那个webmethod的调用,究竟是同步的还是异步?我现在遇到的这个问题,是同步异步造成的吗?谢谢了
解决方案七:
引用4楼Z65443344的回复:
要么就先把所有控件都设置为不可用,等ajax完成刷新了,再重新设置为可用,避免脏数据
如果是这样的话,异步验证好像就没意义了吧,实质上还是同步