近期,在做项目的过程中遇到了一些小问题,依靠互联网的帮助我的问题很快便得到了解决,但我觉得有必要记录下来,一是能让我对该知识点多些印象,二来嘛为了预防,若是下次再碰上这种类似问题不至于茫然无措。项目做到现在依然停留在基础数据模块的搭建中,虽进度有些迟缓,但也处于循序渐进的过程中,每天都有些小收获。
这次的小问题出现在基础模块中的修改员工信息。总所周知,在修改某条数据时,一般都会让数据进行回填操作,以此让用户确定需要修改哪条数据,然而问题便出现在了这一环节中。点击某条员工信息的修改按钮后,弹出修改页面并回填相应的员工信息。下图为员工信息表格:
但数据却并没有全部回填完整,唯独单选框数据回填失败,当然这种情况只针对多个单选框。在设计员工表时,我设计了每个员工都有相对应的角色ID,如:管理员、财务员、销售员等。因此在数据回填时,会根据回填的角色ID值选中与该ID值相匹配的角色单选框,但在这里却出了差错,导致角色、关联仓库单选框无法成功选中原本的对应信息:
后来,我通过页面断点和控制台输出等方式对代码的流程进行检测,发现原来是数据的异步请求搞的鬼。首先要让大家知道的就是,角色这种相当于员工职位的数据不是固定死的,并不是说一开始设置角色有几种便一直是这几种,角色信息也可以让用户自己去改动,用户可以新增、修改、删除角色都可以。这就使角色信息是处于一种“多变”的状态,我在修改员工页面定义好了方法,每次载入页面时,先去数据库中查询一遍当前共有几种角色信息,查询到角色信息后,在拼接成单选框后逐个插入到页面当中:
//<员工>角色单选框拼接&插入
$.post("SelectRole",function(data){
var html = ""; //拼接的选项
var values; //角色ID
var typeName; //角色名称
var divID; //选项input标签ID值
for (var i = 0; i < data.length; i++) {
values = data[i].EmployeeTypeID;
typeName = data[i].EmployeeType;
var fuck = i + 1;
divID = "radio_" + fuck;
html += "<div class='fl mr-3'>" + "<input id='" + divID + "' name='Role' class='TranfromCheck' type='radio' value='"+ values +"' spellcheck='false' />" + "<label for='" + divID + "'>" + " " + typeName + "</label>" + "</div>";
}
//将数据库中的角色信息插入表格中
$("#TdJurisdiction").append(html);
});
这个拼接的操作我是放在数据回填方法之前的,但因为异步这个“熊孩子”的捣乱,导致在还没有完全将角色单选框全部插入的时候,先一步执行了数据的回填操作,从而出现了这种唯独单选框回填失败的情况。当时我便知道了是异步的问题,解决这个问题的关键是如何将异步请求暂时改为同步请求,让所有角色单选框全部插入后再执行下一步的数据回填操作。于是,我通过互联网查找关闭异步的方法,找到了其中既方便又实用的 $.ajaxSettings.async方法:
//关闭异步请求(开启同步) //开启异步请求
$.ajaxSettings.async = false; $.ajaxSettings.async = true;
在拼接方法之前通过$.ajaxSettings.async = false关闭异步请求,接着在该方法结尾处通过$.ajaxSettings.async = true恢复异步,经过我本人的反复测试,靠这看似简单的两句代码便成功解决了单选框的回填问题: