为了账号安全,请及时绑定邮箱和手机立即绑定

在线等,挺急的!知乎看到的一个题求指导!

在线等,挺急的!知乎看到的一个题求指导!

慕虎7371278 2019-10-25 21:33:24
某个应用模块由文本框input,以及按钮A,按钮B组成。点击按钮A,会向地址urlA发出一个ajax请求,并将返回的字符串填充到input中(覆盖input中原有的数据),点击按钮B,会向地址urlB发出一个ajax请求,并将返回的字符串填充到input中(覆盖input中原有的数据)。当用户依次点击按钮A、B的时候,预期的效果是input依次被urlA、urlB返回的数据填充,但是由于到urlA的请求返回比较慢,导致urlB返回的数据被urlA返回的数据覆盖了,与用户预期的顺序不一致。请问如何设计代码,解决这个问题?
查看完整描述

2 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

ajaxA和ajaxB用同一个回调函数。
varresponse={}
functioncallback(data,id){
response[id]=data
if(response.a){
inputA.value=response.a
}
if(response.a&&response.b){
inputB.value=response.b
}
}
如果b比a先回来,input的内容不会变,A再回来的时候会两个依次显示,当然,在显示B的时候建议加一个延迟,不然A的立马被覆盖了如果a比b先回来,input先显示A再显示B
                            
查看完整回答
反对 回复 2019-10-25
?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

唯一的解决方案,预取数据。在第一次请求完成前,已预取所有请求响应数据。那么当后续请求发送时,直接使用预取数据即可。此解决方案仅适合此题,并不一定适用于大多数实际场景。
其他的方案,如请求时阻止其他请求,或者增加请求队列等,都改变了此题原有题意,但却是实际场景中常见的解决方案。
                            
查看完整回答
反对 回复 2019-10-25
  • 2 回答
  • 0 关注
  • 226 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信