IE9 правильно выполняет вызов ajax только после нажатия F12

У меня есть этот код jQuery на моей странице 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 = 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");
            }
         } );
      }
   }

перед выполнением этого кода регистрируются слушатели ajaxSendи ajaxError. Вот так:

  $( "#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.';
     }
  } );

вся страница доступна поhttp://alpha.sertal.ch:8181/VisionWeb/data-details/#data:12300923

вы даже можете войти, если хотите. пользователь :такжеft03 пароль :пароль

что должно произойти, когда вызов ajax сделан в первый раз, это ошибка 401, потому что пользователь не вошел в систему. И здесь IE терпит неудачу. Слушатель ajaxSendвызывается, а ajaxError— нет. Если я устанавливаю обратный вызов ошибки в самом $.ajax, он также не вызывается.

когда открываю страницу в реальном браузере (FF, Chrome, Opera )работает нормально и запрашивает пароль. IE не работает, пока вы не нажмете F12, и в этом случае сайт тоже будет работать как положено.

Это действительно странно. Вы загружаете страницу с открытой консолью, и она работает. Когда консоль закрыта, отображается только пустой заголовок. Как только страница загрузится, вы можете закрыть консоль, и она продолжит загрузку.

Я проверил это на разных машинах и получил тот же результат.

Это сводит меня с ума. Я не могу отлаживать, потому что, если я открываю отладчик с помощью F12, он работает нормально.

Я знаю, что обратный вызов ajax не выполняется, потому что я помещаю строки alert("I got so far")в разные позиции.

Если кто-то имеет ключ, это очень приветствуется.

18
задан Micha Roon 21 June 2012 в 22:33
поделиться