2012-06-21 17 views
16

を打つAJAX呼び出しが、私は私のJSPページ(jQueryの1.7.2)で、このjQueryのコードを持っています。このコードが実行される前にIE9が正しくのみofter F12

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"); 
      } 
     }); 
     } 
    } 

ajaxSendajaxErrorリスナーが登録されています。これと同じように:

$("#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

の下にアクセスすることができます。 user:alsoft03 password:password

ajax呼び出しが初めて行われたときに何が起きるかは、ユーザーがログインしていないため401エラーです。これがIEの失敗です。 ajaxSendリスナーが呼び出されますが、ajaxErrorは呼び出されません。 $ .ajax自体にエラーコールバックを設定しても、それは呼び出されません。

実際のブラウザ(FF、Chrome、Opera)でページを開くと、正常に動作し、パスワードを尋ねます。 IEはあなたがF12を押していないと、サイトが期待どおりに動作しません。

本当に奇妙です。コンソールを開いた状態でページをロードすると、そのページは機能します。コンソールを閉じると、空のヘッダーのみが表示されます。ページがロードされたら、コンソールを閉じるとロードが続けられます。

これをさまざまなマシンでテストしたところ、同じ結果が得られました。

私は狂っている。 F12でデバッガを開くとうまく動作するため、デバッグできません。

私はalert("I got so far")行をさまざまな位置に置くため、ajaxコールバックは作成されていないことを知っています。

誰かがヒントを持っている場合は、大歓迎です。

答えて

50

console.log()のすべてのインスタンスは、開発者モードでなくてもIE9で動作するためには、スクリプトから削除する必要があります。

更新日私はこの回答がいくつかの人々を助けてくれてうれしいです。あなたのコードの前に、この

// Avoid `console` errors in browsers that lack a console. 
(function() { 
    var method; 
    var noop = function() {}; 
    var methods = [ 
     'assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error', 
     'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log', 
     'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd', 
     'timeStamp', 'trace', 'warn' 
    ]; 
    var length = methods.length; 
    var console = (window.console = window.console || {}); 

    while (length--) { 
     method = methods[length]; 

     // Only stub undefined methods. 
     if (!console[method]) { 
      console[method] = noop; 
     } 
    } 
}()); 

場所を、それはあなたがコンソールに欠けているブラウザで任意のコンソールエラーを回避するのに役立ち必要があります。ただ、私はHTML5 Boilerplateから使用されているシンプルなソリューションでこの答えを更新しようと思いました。

+0

解決を取得するために偽のそれはコンソールが開いていなくても実行されます。なぜなら、コンソールがロードされていないからです。定期的な閲覧のために1つを読み込むのはなぜですか?ほとんどの人は開発者ではありません。 – TheZ

+3

私はそれを決して考えなかったでしょう!どのようにそれらの愚かな、本当に。私はそれについて論争するかもしれないと思うが、私はこのたわごとで一日失った。 1つのことは確かですが、私はそれを忘れないでしょう:-) –

+0

うれしい私は助けることができました! = D – eivers88

2

IEの開発者モード以外でconsole.logが定義されていません。私はデバッグしていないときのために変数を作るだけです。

var console = {log: function(){}}; 

+0

これは非常に友好的ではなく、毎回その行を編集する必要があります。 {if(!window.console)console = {log:function(){}、info:function(){}、警告; function(){}、エラー:function(){}} 'ページのどこかに出力する独自の実装 –

+0

@JuanMendes生産コードであれば、私はむしろコンソールを汚染しません。 – matt3141

+0

他のすべてのブラウザにはすでにグローバルコンソールがありますが、それほど汚染はありません。コードを忘れてしまった場合、コードが破損するのを防ぎます。 –

1

私はこの問題を抱えていましたが、すべてのコンソールリファレンスがスクリプトでコメントアウトされていましたが、Internet Explorerのみ(11)ではまだ失敗していました。解決策は、AJAX呼び出しにキャッシュを追加することだとわかりました。

$.ajax({ 
     **cache: false,** 
     type : 'GET',}) 

すべての私の入力は属性の自動補完=「オフ」

0

は実際にそれは私の時間が保存されている、IE 11では、我々はキャッシュに置く必要があります場合は、GET Ajaxはこの問題

関連する問題