Naudodamas $.post()
iškviečiu servletą, naudodamas "Ajax", o gautą HTML fragmentą naudoju pakeisti div
elementą dabartiniame vartotojo puslapyje. Tačiau jei sesija baigiasi, serveris siunčia nukreipimo direktyvą, kad vartotojas būtų nusiųstas į prisijungimo puslapį. Šiuo atveju jQuery pakeičia div
elementą prisijungimo puslapio turiniu, todėl vartotojo akys tampa išties reto reginio liudininkais.
Kaip su jQuery 1.2.6 valdyti nukreipimo direktyvą iš Ajax skambučio?
Naudokite žemo lygio $.ajax()
iškvietimą:
$.ajax({
url: "/yourservlet",
data: { },
complete: function(xmlHttp) {
// xmlHttp is a XMLHttpRquest object
alert(xmlHttp.status);
}
});
Išbandykite šį nukreipimo būdą:
if (xmlHttp.code != 200) {
top.location.href = '/some/other/page';
}
servletą, turėtumėte įrašyti
response.setStatus(response.SC_MOVED_PERMANENTLY);
siųsti "301" xmlHttp būseną, kurios reikia nukreipimui...
o funkcijoje $.ajax neturėtumėte naudoti funkcijos .toString()
, tiesiog
if (xmlHttp.status == 301) { top.location.href = 'xxxx.jsp'; }
Problema yra ta, kad jis nėra labai lankstus, negalite nuspręsti, kur norite nukreipti..
nukreipimas per servletus turėtų būti geriausias būdas. bet aš vis dar nerandu tinkamo būdo, kaip tai padaryti.
Be to, tikriausiai norėsite nukreipti naudotoją į antraštėse nurodytą URL adresą. Taigi galiausiai jis atrodys taip:
$.ajax({
//.... other definition
complete:function(xmlHttp){
if(xmlHttp.status.toString()[0]=='3'){
top.location.href = xmlHttp.getResponseHeader('Location');
}
});
UPD: Opps. Turiu tą pačią užduotį, bet ji neveikia. Darau šį dalyką. Parodysiu sprendimą, kai jį rasiu.