流程是这样的:
1.异步请求
2.同步判断
需求:先是判断是否为敏感词的 ajax 异步请求,且该请求的优先级高于第二个同步的判断,即输入内容如果是敏感词,则不需要进入 2 中的同步判断。
现状:如果保持这样的流程就会使前端展示混乱,考虑的解决方式有:
解决思路 1:
将 1 的异步请求变为同步,但是这样也同样会影响用户体验。
解决思路 2:
将 2 的同步放在 setTimeout 的进程中变为异步,使用 async/await 异步请求 2 个判断。但是做感觉这样有点小题大做了,而且私以为也不是什么特别好的方法。
有没有更好的解决方法,请大家指教!
1
fds 2017-11-13 14:28:50 +08:00
没懂,异步请求回来再同步判断会有什么问题?
过程中前端应该保持“等待服务器结果”的状态。 能用 await 的话代码更简单了。await 1 然后同步 2 呗…… |
2
Corbusier OP @fds 你好,我的意思是这两个请求是没有请求结果关联依赖的,比如说第一个请求得到的结果是敏感词需要对应展示,同步中的判断,如:是否为特殊字符,长度限制等,也对应了相应的展示。而如果保持这样的 1.同步 2.异步就会导致前端页面展示混乱。现在我表达意思清晰了吗?
|
3
yongjing 2017-11-13 14:54:18 +08:00
2 依赖于 1 的返回结果,所以我 “不感觉这样有点小题大做”
|
4
meszyouh 2017-11-13 14:59:13 +08:00
没觉得哪里混乱了 , 异步的判断优先于同步的判断 , 后端判断是敏感 就提示敏感 , 否则在同步判断 , 然后再显示
|
5
Corbusier OP @meszyouh 你的理解没有错,但是问题的关键还是在于异步 /同步的执行顺序问题。同步的前端展示已经有了,而第一步的异步才刚拿到结果,这样就会马上修改已有的前端展示。所以我的想法是在于把异步请求变为同步,或者是同步请求放在另一个线程里强行的变为异步,然后 async/await。不知道我表达的有没有问题
|
6
whypool 2017-11-13 15:27:39 +08:00
流程就不对,哪有那么纠结,还同步,神经病啊;
输入框 1->输入状态->失去焦点,把内容发 ajax 判断,等待返回结果,记录验证是否通过; 输入框 2->输入状态->失去焦点,把内容发 ajax 判断,等待返回结果,记录验证是否通过; 由于失去焦点就发 ajax,反复操作容易卡服务器,还容易阻塞,可以加个按钮什么的,让用户主动去触发校验(产品的锅); 或者等用户全部输入完成了一起发 ajax 校验,判断一下返回就行了 |
7
meszyouh 2017-11-13 15:45:49 +08:00
@Corbusier 什么叫 同步的前端展示已经有了, 难道不是 判断, 显示 loading , 再把结果呈现给用户?看你的描述 触发一个事件 先执行同步的判断 ...
|
8
fds 2017-11-13 15:48:15 +08:00
@Corbusier 这其实是两个状态,不应该互相干扰的。前端展示应该同时判断两个状态。
两个状态: 敏感:可能取值:等待验证结果、有敏感词、没问题 其他:可能取值:没问题、超长、特殊字符 一个前端展示函数: 敏感为有敏感词,显示为有敏感词。 敏感为等待验证结果,显示为等待中。 敏感为没问题,根据“其他”的状态显示。 输入完或异步回调完都调用展示函数即可。 不过我没明白为什么同步的判断优先级要比敏感词低。按理说应该是先通过了同步判断再进行 ajax 验证的。 |
9
Corbusier OP @fds 感谢回复!如果按照先同步判断再进行 ajax 验证,展示结果提示:超长||特殊字符,用户继续输入敏感词,异步返回敏感词提示。这样不就是涉及到了展示混乱的问题了吗?请求过程取反结果亦然。不过这和我的事件绑定也有关系,我的表单验证绑定的是"input"事件,并不是失去焦点或提交时才进行判断的。
|
10
0Kelvin 2017-11-14 08:47:47 +08:00
考虑把两个提示分开,这样就不会有覆盖结果的情况了吧?不知道我理解的对不对-。-
|