我的GWT应用程序中有以下JSNI代码,它发出HTTP请求以检测URL重定向-
private native void checkSession(String url)
/*-{
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(e) {
if (xhr.readyState == 4) {
if (url != xhr.responseURL) {
$wnd.alert("Your session has timed out.");
$wnd.location.assign(url);
}
}
}
xhr.open("GET", url, true);
xhr.send();
}-*/;
如果请求的URL与响应URL不同,则视为会话超时;在此基础上,我想显示一个警报框,让用户知道会话已超时,并在单击“确定”时启动重定向。
我有一个实现
AsyncCallback
. 使用
this technique
,我能够在全球范围内执行
onFailure()
调用
checkSession()
每当
StatusCodeException
发生。
问题是警报框以前会弹出几次
$wnd.location.assign(url)
可以启动重定向。我意识到
onFailure()
这里执行的方法导致警报多次弹出,但我的问题是,为什么
万美元。地方分配(url)
直到最后一次才执行
onFailure()
$wnd.alert()
就在它上面,每次都被执行?
在这种情况下,如何强制重定向?理想情况下,我希望警报弹出一次,单击OK后立即重定向。