IE9 poprawnie wykonuje wywołanie Ajax dopiero po naciśnięciu klawisza F12
Mam ten kod jQuery na mojej stronie JSP (jQuery 1.7.2):
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 = resu<
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");
}
} );
}
}
Odbiorniki
ajaxSendi
ajaxErrorsą rejestrowane przed wykonaniem tego kodu. Lubię to:
$( "#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.';
}
} );
cała strona jest dostępna w dziale
http://alpha.sertal.ch:8181/Vi ... 00923
http://alpha.sertal.ch:8181/Vi ... 00923
możesz się nawet zalogować, jeśli chcesz. użytkownik: alsoft03 hasło: hasło
co powinno się wydarzyć przy pierwszym wywołaniu Ajax to błąd 401, ponieważ użytkownik nie jest zalogowany. I w tym miejscu IE zawodzi. Wywoływany jest odbiornik
ajaxSend, ale odbiornik
ajaxErrornie. Jeśli ustawię wywołanie zwrotne błędu w samym $ .ajax, to również nie zostanie wywołane.
kiedy otwieram stronę w prawdziwej przeglądarce (FF, Chrome, Opera) działa dobrze i prosi o hasło. IE tego nie robi, chyba że naciśniesz F12, w takim przypadku strona również działa zgodnie z oczekiwaniami.
To jest naprawdę dziwne. Załadujesz stronę przy otwartej konsoli i działa. Gdy konsola jest zamknięta, wyświetla tylko pusty tytuł. Po załadowaniu strony możesz zamknąć konsolę, a ładowanie będzie kontynuowane.
Przetestowałem to na różnych maszynach i uzyskałem ten sam wynik.
Doprowadza mnie to do szału. Nie mogę debugować, ponieważ jeśli otworzę debugger za pomocą F12, działa dobrze.
Wiem, że wywołanie zwrotne Ajax nie jest wykonywane, ponieważ umieszczam wiersze
alert („Mam do tej pory”)w różnych pozycjach.
Jeśli ktoś ma wskazówkę, jest bardzo wdzięczna.
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
4 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
Aktualizacja
Cieszę się, że ta odpowiedź pomogła kilku osobom. Pomyślałem, że zaktualizuję tę odpowiedź prostym rozwiązaniem, którego używam
HTML5 Boilerplate
http://html5boilerplate.com/
:
Umieść to przed swoim kodem, a pomoże ci to uniknąć błędów konsoli w przeglądarkach, które nie mają konsoli.
Anonimowy użytkownik
Potwierdzenie od:
w przypadkach, w których nie debuguję.
Anonimowy użytkownik
Potwierdzenie od:
Wszystkie moje dane wejściowe mają autocomplete = „off”
Anonimowy użytkownik
Potwierdzenie od: