一些理解-过滤器,拦截器,ajax提交后不跳转,document.location.href无效,回调函数。

1.struts2中过滤器和拦截器的工做流程:css

request-->执行自定义过滤器doFilter方法中的chain.doFilter()方法的代码-->执行默认过滤器doFilter方法中的chain.doFilter()方法的代码-->执行默认拦截器-->执行自定义拦截器-->访问服务器资源(action,css,html,jsp...)-->执行自定义拦截器-->执行默认拦截器-->执行默认过滤器的doFilter方法中chain.doFilter()方法的代码-->执行自定义过滤器doFilter方法中的chain.doFilter()方法的代码-->客户端开始执行响应responsehtml

注:①上面的自定义的过滤器在默认过滤器以前执行只是一个假设的顺序,这其中光光默认的过滤器这个执行过程就有不少细节,这个网上资料或者源码剖析有不少。web

  ②自定义过滤器有多个的话,它的执行顺序和你在web.xml中布置的前后顺序有关,前者先执行。ajax

  ③注意请求和响应这个来回中,多个过滤器的先后执行和拦截器的先后执行顺序是对称的。服务器

2.ajax的同步是ajax的事没作完前,其余的事不能作,要等着它。异步相反,同时性互不影响地执行。异步

3.注意起来一个状况:ajax+submit+同步----就是你用ajax请求服务器,并且用的是同步的方式,而且你是经过点击了type类型为submit的按钮来触发这个ajax。jsp

这个时候,首先你点击了submit,它会提交表单,可是因为你用了ajax的同步操做,submit的提交被阻塞,ajax先执行,这个时候,若是你在ajax的回调函数(如:success)中写了document.location.href='xxx.html',它是执行了,的确是去执行了跳转的,因而ajax完成了,那接下来就要把刚才的submit提交的请求完成。因而呢又要从xxx.html跳回到刚才那个页面(不管你submit有没有提交具体的数据,总之提交了以后若是后台没有执行跳转/重定向,它就要回到原来的页面。)函数

即:ajax就是如你所想那样执行了,也从A页面跳到了B页面,可是因为submit这种类型的特殊性,又让B页面跳回了A页面,因为这个ajax执行完再执行submit请求的过程处理的很快,你会感到好像没有效果,可是你仔细观察,会发现这个过程页面会刷新的,其实就是B页面跳回到A页面。spa

因此当用ajax去请求时,咱们要用button,而不是submit,更要慎用同步。xml

4.回调函数理解:

不严谨地用ajax来讲吧:ajax提交了一个请求,好比去请求了一个action,这个时候ajax跟这个action说,老哥你帮我办个事呗(我给你个地址,你去帮我拿个东西,而后好了交给我),而后action答应了而且把要处理的业务处理完。这个时候,action想告诉ajax你叫我作的我完成了,而且你跟我要的东西我也准备好了,可是我怎么给你呀??

①:你们想下怎么回头告诉ajax你叫我作的我作好了,而且要把东西给ajax?难道又要弄个请求,去请求这个东西?这样的话,那这个请求怎么知道前面请求了什么,怎么知道要去拿什么?就像ajax在叫他的朋友ajaxBBBB去帮他去到Action那里拿,但是此次ACtion又怎么告诉这个ajaxBBBB说东西在哪,你过来拿。这个又怎么通知ajaxBBBB,难道又要弄个请求,这个请求问问他东西放哪??这不是陷入无限循环了嘛,因此就有了回调函数。

②:回调函数这个函数是存在于ajax里面定义的,只是有了借口可以给别人调用。好比Action完成了请求的业务,因而调用了ajax的success回调函数,把数据回传给ajax,而后success回调函数去处理这些数据。

  这就好像:ajax以为刚才这事不行,很烦。因此他花了大价钱,买了一辆小货车,这个车就是属于ajax的,而后每次ajax叫action办事,他只要跟action说要办的事,而后就在家里等着,action作好了,只要去把ajax的货车开过来,把东西装上,给ajax送过去。这个车就是回调函数,他属于发出请求的一方,而调用他的是被请求的一方,由于回调函数是在请求一方的体内,请求方能够知道能够获得能够访问这个函数,也就能够获得这个函数体内的信息了。

③:为了帮助记忆,用一句话来讲。-------A对象有2个方法,一个方法是用于发送请求到B的,另外一个是B完成请求去用来传送信息和数据的。A发请求,B接收并完成,B再调用A中的回调函数,A执行这个回调函数。

其实说这个B调用了A中的回调函数是很不严谨甚至错误的,由于B的目的是传回消息和数据给A,B只是说把数据做为回调函数的一个参数,等A执行回调函数的时候用罢了。这个过程还有不少细节。我只是为了你们好理解。

我只是尽力地阐述了个人理解。有不对的地方望指正,至于一些很细很细的源码,过程之类的剖析能够百度,这些网上不少的。

相关文章
相关标签/搜索
每日一句
    每一个你不满意的现在,都有一个你没有努力的曾经。