![]() |
|||
流水号 | 20240813001 | ||
标 题 | 关于教务系统学生端成绩查询功能的BUG问题 | ||
写信时间 | 2024年08月13日 | ||
信件内容 | 尊敬的校领导,您好! 我在使用教务系统学生端,查询成绩时,发现点击打印按钮,有概率会导致网页卡死。尤其是在打印页面刷新的时候。 我研究了一下,发现原因如下:是初始化环节发生了错误,初始化是获取成绩JSON数据,具体是在一个GET方式的HTTP请求中获取数据,然后调用"studentGradePrint(res);"函数生成表格。但是,这个HTTP请求返回的JSON数据的结构却不唯一,导致初始化时访问到空指针而失败。这个HTTP请求的结果是一个只包含一个元素的Map。正确的结果应该是一个名为"studentGradeList",值为存储了所需数据的Map的一个键值对;但是却有概率使“studentGradeList”双重嵌套,形成{"studentGradeList": {"studentGradeList": { 的格式,而初始化的代码中并没有处理这一情况。经查证,这是后端返回结果的问题。 如果后端代码难以修改,可以通过前端来解决,将"studentGradePrint(res);"这一句代码更换为"while(res.studentGradeList!=null) res=res.studentGradeList; studentGradePrint(res);"这几句,使得不管有多少层"studentGradeList"的嵌套,都可以正确解析,这几句代码我已经试过,正常。当然更简单的方式是判断有一层还是两层,目前只发现会出现两层的情况。 虽然可以通过前端解决,但这实际是后端的问题。后端的代码我看不到,但是对于BUG发生的原因我有一点推测,可供参考。BUG多发生在打印页面刷新时,也就是多次提交同一请求时,我怀疑是因为应对同一请求时,并发的不同线程之间没有正确调度,对各请求的不同回复的数据产生了混淆,导致JSON多重嵌套。应当通过添加线程锁等方式来真正解决。 下面是相关部分的原始代码,包括了前端涉及BUG的全部代码:发送请求和调用函数生成表格。 ```javascript $('#progress-bar-modal').on('shown.bs.modal', function (e) { $.ajax({ url: window.CONTEXT_PATH + '/for-std/grade/sheet/get-grade-data/' + studentId, type: 'GET', data: { semesterId: semesterId }, success: function (res) { $('.table-container').empty(); studentGradePrint(res.studentGradeList); } }); } ``` 希望BUG可以顺利解决,期待您的回复。 | ||
![]() |
|||
处理状态 | 已处理 | ||
回复内容 | |||
同学,你好,来信收悉。 现已经根据你的反馈对存在的系统BUG问题完成修复处理。感谢你对教务系统应用问题的专业建议。 祝:学习进步,生活愉快! |
|||
受理单位 | 教务处 | ||
处理时间 | 2024年08月19日 |