Ich habe diesen jQuery-Code in meiner JSP-Seite (jQuery 1.7.2):IE9 macht richtig Ajax-Aufruf nur often F12 schlagen
function Header() {
this.add = function (parentDiv, leftToolbar, rightToolbar) {
hbHeader = Handlebars.compile($("#hb-header").html());
$(parentDiv).html(hbHeader({user:{tenantDescription:"", firstName:"", lastName:""},
leftTB:null, rightTB:null }));
$.ajax({
url:"${pageContext.request.contextPath}/services/login/sessionUser",
type:"POST",
async:true,
success:function (result) {
app.user = result;
var ltHtml;
var rtHtml;
if (leftToolbar) {
ltHtml = new Handlebars.SafeString(leftToolbar);
}
if (rightToolbar) {
rtHtml = new Handlebars.SafeString(rightToolbar);
}
$(parentDiv).html(hbHeader({user:app.user,
leftTB:{
html:ltHtml,
hidden:leftToolbar == null
},
rightTB:{
html:rtHtml,
hidden:rightToolbar == null
}
}))
},
error:function(jqXHR, textStatus, errorThrown) {
alert("error in ajax");
}
});
}
}
bevor dieser Code ausgeführt wird, ein ajaxSend
und eineine ajaxError
Zuhörer registriert sind. Wie so:
$("#log-window").ajaxSend(function (event, jqXhr, ajaxOptions) {
console.log("handling an ajax request adding username and password to the header");
jqXhr.setRequestHeader('username', $.cookie('username'));
jqXhr.setRequestHeader('password', $.cookie('password'));
});
$("#log-window").ajaxError(function (errorThrown, xhr, failedReq, textStatus) {
alert("error in "+failedReq.url);
if (textStatus == 'timeout') {
if (!failedReq.tryCount) {
failedReq.tryCount = 1;
failedReq.retryLimit = 3;
}
if (failedReq.tryCount++ <= failedReq.retryLimit) {
//try again
$.ajax(failedReq);
return;
}
throw 'Es wurde ' + failedReq.retryLimit + ' Mal versucht. Die Verbindung scheint nicht zu funktionieren.';
return;
}
if (xhr.status == 500) {
if ($.cookie('pageRefreshed') == null) {
$.cookie('pageRefreshed', 'true', { expires:10000 });
location.reload();
}
throw 'Der Server hatte ein Problem. Bitte melden Sie den Fehler and den Systemadministrator';
} else if (xhr.status == 401) {
if (failedReq.url != "${pageContext.request.contextPath}/services/login") {
var loginData = {
username:$.cookie('username'),
password:$.cookie('password')
};
loginAttempt(failedReq, loginData);
}
} else {
throw 'Oops! There was a problem, sorry.';
}
});
die ganze Seite können Sie unter http://alpha.sertal.ch:8181/VisionWeb/data-details/#data:12300923
zugegriffen werden kann, auch anmelden, wenn Sie mögen. user: alsoft03 passwort: passwort
was passieren sollte, wenn der ajax call zum ersten mal gemacht wird, ist ein 401 fehler weil der user nicht eingeloggt ist. Und hier kommt der IE nicht an. Der ajaxSend
Listener wird aufgerufen, aber die ajaxError
ist nicht. Wenn ich einen Fehlerrückruf auf $ .ajax selbst setze, wird es auch nicht aufgerufen.
Wenn ich die Seite mit einem echten Browser (FF, Chrome, Opera) öffne, funktioniert es gut und fragt nach einem Passwort. IE funktioniert nicht, wenn Sie F12 drücken. In diesem Fall funktioniert die Site auch wie erwartet.
Es ist wirklich komisch. Sie laden die Seite mit geöffneter Konsole und es funktioniert. Wenn die Konsole geschlossen ist, wird nur eine leere Kopfzeile angezeigt. Sobald die Seite geladen wurde, können Sie die Konsole schließen und sie wird weiter geladen.
Ich testete dies auf verschiedenen Maschinen und bekam das gleiche Ergebnis.
Es macht mich verrückt. Ich kann nicht debuggen, denn wenn ich den Debugger mit F12 öffne, funktioniert es gut.
Ich weiß, dass der Ajax-Rückruf nicht gemacht wird, weil ich alert("I got so far")
Zeilen an verschiedenen Positionen gesetzt habe.
Wenn jemand eine Ahnung hat, ist es sehr willkommen.
Wenn Es läuft ohne die Konsole geöffnet es wirft einen Fehler, denn, nun, es gibt keine Konsole geladen. Warum laden Sie einen für das regelmäßige Surfen? Die meisten Leute sind keine Entwickler. – TheZ
hätte ich nie gedacht !! Wie dumm von ihnen, wirklich. Ich denke, man könnte darüber streiten, aber ich habe nur einen Tag mit dieser Scheiße verloren. Eins ist sicher, das werde ich nicht vergessen :-) –
Ich bin froh, dass ich helfen konnte! = D – eivers88