事象
javascriptのajaxからJavaServletへ命令を投げて、JavaServletが編集した内容をjavascriptに返却し、javascriptが画面更新する という一般的な処理を書いたのですが、IE11のときだけ思ったとおりに更新されません。
原因
具体的には、JavaServletが編集する前の内容で画面更新される動きになっていました。なぜだろうかとJavaServletをデバッグしてみると、JavaServletまで到達していないことが判明しました。
さらに踏み込んで調査していくと、JavaServletにアクセスされないのはIE11のキャッシュが原因であることが判明しました。信じられないのですが、そんな動きをしていました。以下に、解決方法を記載します。
解決方法
様々なやり方があるでしょうが、私が実施した方法はpreHandleをオーバーライドしてキャッシュクリアの処理を書くことです。
HttpRequestHandlerInterceptor.java
public class HttpRequestHandlerInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { // キャッシュ制御(IE対応) response.setHeader("Cache-Control", "no-cache"); return true; } }
これで解決します。