00:00
哈喽,大家好,那么这一个小节的话,我们来讲一个阿贾克斯重复发送请求这样一个情况。我们来演示一下。首先我们以六这个文件为例。点开浏览器,把其他全关全关掉啊,打开控制台。然后点击点击点击点击点击点击点击,你发现我每点击一下呢,就会创建一个请求,每点击一下就会创建一个请求。那么如果说我们的服务呢,响应比较慢,用户呢,疯狂去点击。当然了,响应快也是如此啊,用户疯狂去点击,那么这个时候呢,就会有一个情况,我们的服务器呢,压力就会很大,他会接收到非常多的请求。而且是相同请求。用户一直点啊。那么这时候就会产生一个问题啊,就是用户呢,频繁发请求,我们服务器要频繁去处理。那么这个时候咱们可以怎么办呢?我们可以这样来做啊,我们点击一个按钮之后呢,可以先看一看之前有没有相同请求。
01:02
啊,如果说有,那我们就可以把这个请求取消掉,然后发送一个新的。再说一遍啊,我们可以这样子点击点击,当我点第二下的时候,可以把第一个取消掉,这样一来的话,我们当前向服务器发送这个请求就始终只有一个。这样一来的话,服务企业压力就会小一些,而且这是一个人,那么如果说用户的人比较多啊,咱们的这个体现的这个。效率或者说这个影响就比较大。啊,性能提升也就比较高了。好了,那么这个怎么来做呢?我们来给大家演示一下,其实也比较简单。把这个文件呢,我复制一份在这呢,重命名七杠啊。重复请求问题。然后把这个呢,咱们改改名字,重复请求问题。啊,把第二个按钮咱们就直接直接去掉了,啊把这个呢,咱也关掉。然后呢,右键打开。
02:00
把这个呢,咱关掉。然而此时点击呢,它还是会发请求,因为两个文件代码是一模一样子的啊,都是给这个类去发的请求。那我们现在怎样能够保证第二次点的时候?啊,第二次点的时候能够把上一个没有完成的请求给它取消掉呢。我们这会儿就要加一个判断。加一个标志。标识变量。好,我们来一个let is。这个名字其实你可以随便写。在这块意思是是否。正在发送价格请求。Force呢,表示他没有再发,True呢表示它正在发送。那么这个时候咱们可以在代码的位置。来去加上它的一个状态,比如说咱们已经把对象创建出来了,那么肯定咱们现在是在发送啊,加个请求,所以说在这儿呢,修改。
03:01
啊,修改标识变量的一个值sending等于一个处。那么这个值它什么时候应该变为false呢?就当我们的请求在完成之后,它应该在还原成false。那就是我们请求完全回来了,回来之后咱们再请求已经完成了,此时把这个正在发送请求的一个变量,把它变成一个false就OK了,那么咱们什么时候完成呢?哎。就要等它整个的一个状态为四的时候,咱们就请求完成了,所以这块咱们可以再去绑定那个事件。X on ready state change,然后function。啊,在里边判断,如果说x.ready state要是等于一个四。那么在这呢,我们就可以修改标识变量。来一个is sand。等一下,等一个false。所以可能会说,那这里咱们不需要加那个状态码判断吗?在这儿呢是不需要加的,为什么呢?因为很可能这个请求是一个失败的请求。
04:07
那么这个时候的话,如果你在成功里边做判断,这个变量将永远不会为false。啊,所以说咱们只要状态为四,就可以把它这个值呢,改成一个false。那么此时呢?咱们现在is sending这个变量就已经能够成功的标识出咱们现在是不是正在发送加X请求。所以说当我们下次再点击按钮的时候,可以判断这个标识变量。判断标识变量,如果说is sending,它正在发送,正在发送的话,那对不起,兄弟,我们就需要把上一个取消掉,来一个about。写上,如果正在发送。正在发送。则取消该请求。创建一个新的,创建一个新的请求。OK,保存切过来看看效果怎么样啊,刷新页面点击。
05:04
点击点击点击点击点击,让用户即便是疯狂的点击,这也不受影响,我们始终只有一个请求正在发送啊,这样的话服务器压力也会小很多。好了,那么这个小节的话,关于阿贾克斯重复请求发送一个问题,我们就先到这儿。
我来说两句