2012-03-04 21 views
1

に、私はこのコードを使用していない:アヤックスとのJavascriptがFFで動作しますが、IE

<script type="text/javascript"> 

     var id = <?php if(is_numeric($_GET['id'])) print $_GET['id']; else print "0"; ?>; 
     var startid = id+1; 
     var end = false; 

     // function for loading one row 
     function getRow(rowid) 
     {   
      //$.get("unhandled_one_row.php?id=" + rowid, function(data){ if(data!="\n") $('#dash_table > tbody').append(data); else { } }); 

      function HttpRequest(url){ 
      var pageRequest = false; //variable to hold ajax object 

      /* 
      if (!pageRequest && typeof XMLHttpRequest != 'undefined') 
      pageRequest = new XMLHttpRequest(); 
      */ 

      if(window.ActiveXObject) // Internet Explorer 
      { 
      try 
      { 
       pageRequest = new ActiveXObject("Msxml2.XMLHTTP"); 
      } 
      catch (e) 
      { 
       pageRequest = new ActiveXObject("Microsoft.XMLHTTP"); 
      } 
      } 
      else // Firefox, Opera, Safari 
      { 
      pageRequest = new XMLHttpRequest(); 
      } 

      if (pageRequest){ //if pageRequest is not false 
      pageRequest.open('GET', url, false); //get page synchronously 
      pageRequest.send(null); 
      embedpage(pageRequest); 
      } 
      } 

      function embedpage(request){ 
      //if viewing page offline or the document was successfully retrieved online (status code=200) 
      if (window.location.href.indexOf("http")==-1 || request.status==200) 
      { 
      if(request.responseText != "\n") document.write(request.responseText); 
      else end = true; 
      } 
      } 

      HttpRequest("unhandled_one_row.php?id=" + rowid); 
     } 

     // function for deleting a row 
     function RemoveRow(obj) 
     { 
      var rws; 
      obj=document.getElementById(obj); 
      rws=obj.getElementsByTagName('TR'); 
      obj.removeChild(rws[rws.length-1]); 
     } 

     // row loading loop 
     do 
     { 
      getRow(id++); 
     } while(!end && document.getElementById("dash_table").clientHeight < document.body.clientHeight - 100); 

     // avaiable height exceed control 
     // deletes one row if the height was exceeded 
     if(document.getElementById("dash_table").clientHeight >= document.body.clientHeight - 100) 
     { 
      RemoveRow('dash_table'); 
      id--; 
     } 

の利用できる高さとテーブルの高さを比較しながら動的にテーブルをロードすることになって行毎れます使用可能な高さに達すると、ループが停止します。このコードはG.ChromeのFFではうまく動作しますが、IEではループが無限に繰り返されます。

なぜですか?

答えて

0

OKを忘れることができます私は(FFまたはG.Chromeとは違って)IEは、テーブルの動的生成をサポートしていることが分かりましたDOMオブジェクトを使用します。私がしたようにdocument.write関数を使用するのは、各行が追加された後で更新するためにテーブルの属性を必要としない限り間違いではありません。 これを知った後、解決はほんの数分の問題でした。

内のgetRow機能私は、次のコードを置く:、

var content = request.responseText.split(";"); 

var row = document.createElement("tr"); 
row.className = content[0]; 

var cell = document.createElement("td"); 
cell.innerHTML = content[1]; 
row.appendChild(cell); 

cell = document.createElement("td"); 
cell.innerHTML = content[2]; 
row.appendChild(cell); 

素敵な...これは簡単/怠惰な方法を使用して、彼のテーブルを生成しようとします:)

0

あなたが可能と不可能しようとの時間後に、このファサードを使用してIE https://github.com/ilinsky/xmlhttprequestに問題やhttps://github.com/bga/jbasis/blob/master/src/ieXDRToXHR.js

+0

うーん皆のための教訓とするとありがとう。しかし、私はいくつかのテストを行ったので、AJAX呼び出しは問題ではありません。問題は、このループでテーブルの高さをチェックすることです: 'do { // getRow(id ++); document.write(testrow); id ++; IEでは、表が動的にクライアントのHeight属性をインクリメントしないように見えます(FFまたはGのときは、このように表示されます)。クロムそれは)。あなたはIEでそれを修正する方法を知っていますか? –

関連する問題