客户端同步,服务器端异步

最近在公司碰到点难题。关于点击button拿到最新的汇率。

 

之前的需求是客户端AJAX请求为同步,async=false.点击一次按钮,在前一个请求没有返回以前,不发出新的请求的。

 

 

$.ajax({
  url: "test.html",
  async:false,
  success: function(){
      //todo
  }
});
 

 

后来需求需要客户端ajax请求异步。async:true。比如:连续点击10次,响应错误显示error message和成功返回更新数据都只与最后ajax请求相关。

 

1.那么怎么处理知道是最后一次请求呢??

设一个时间戳,记住最后一后请求的时间,

 

$.ajax({
  url: "test.html",
  async:true,
  time:new Date(),
  success: function(){
      //todo
  },error:function(){ }
});

 服务端不改变time的值,返回来。success里面比较一下时间就行了。

 

2.error message处理。

如果是timeout error message呢。如何判断是最后一次的error呢。根本不可能返回time param.

讨论了许久,有个比较垃圾的方式:lastSuccess=false,如果最后一次成功返回,就lastSuccess=true.

在error里面,if(lastSuccess==fasle){显示error message}.

特殊情况,如果第一次失败,那么会show error message.第二次成功了,那么会清除error message,然后更新数据。

 

3.考虑一种极端情况,如果点击三次,倒是最后一次请求最先返回,有可能吗?如果有可能,那么上面分析的逻辑是对的吗?

我用Thread.sleep()的方式来unit test。一直不成功。ajax响应会按请求的顺序返回。

我的debug的方法,把前一个ajax response请求hold住,后面也一个请求居然排队??

为什么呢。servlet不是对于每个请求会有一个新的servlet吗??

 

4.请问,两个用户访问同一个servlet,如果a用户的请求没有返回,b的请求可以发出吗?a,b同一台机器同一browser?

同一个pc,不同browser??不同pc呢?

 

5.难道servlet对于同一session的用户,请求是单线程的??

 

6.jquery.ajax{async:true},只是表示客户端是多线程的,服务器端不确定?

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值