Nested Select Field联动优化咨询:本地正常生产环境运行失效如何解决
问题根因
你当前使用固定时长setTimeout等待上一级选项更新的方案稳定性极低:本地环境接口响应速度快,刚好能在你设置的超时时间前完成子选项渲染和赋值;但生产环境受网络波动、服务负载等因素影响,接口响应速度波动极大,经常出现超时时间触发时上一级的请求还未返回、选项还未更新的情况,直接导致后续方法拿到的是旧值或者空值,功能失效。
优化实现方案
方案1:基于回调函数改造(改造成本最低)
给你现有的getprojSubtype、getprojSpetype等异步请求方法增加回调入参,在请求完成、子选项渲染成功后再执行回调里的下一级请求逻辑:
// 示例:改造getprojSubtype方法,其他get类方法同理修改 function getprojSubtype(parentVal, callback) { $.ajax({ url: '你的接口地址', data: { type: parentVal }, success: function(res) { // 原有渲染#selectProjectsubtype选项的逻辑保持不变 // 渲染完成后执行回调 callback && callback() } }) } // 改造后的change事件逻辑 $('#selectProjecttype').on('change',function(){ getprojSubtype($(this).val(), function(){ // 二级选项更新完成后再触发三级请求 getprojSpetype($('#selectProjectsubtype').val(), function(){ // 三级选项更新完成后再触发四级请求 getprojSpesubtype($('#selectProjectspetype').val()) }) }) })
方案2:基于每级select的change事件独立绑定(可维护性更高)
给每一级选择框单独绑定change事件,父级变化仅更新它的直接子级,子级变化后自动触发下一级更新,无需嵌套逻辑:
// 一级分类变更更新二级分类 $('#selectProjecttype').on('change',function(){ getprojSubtype($(this).val()) }) // 二级分类变更更新三级分类 $('#selectProjectsubtype').on('change',function(){ getprojSpetype($(this).val()) }) // 三级分类变更更新四级分类 $('#selectProjectspetype').on('change',function(){ getprojSpesubtype($(this).val()) })
该方案支持任意层级的联动扩展,某一级逻辑修改也不会影响其他层级,长期维护成本更低。
内容的提问来源于stack exchange,提问作者jokz
相关产品推荐
相关产品推荐

