2012-03-04 59 views
1
Ajax的工作原理

我使用这个代码:的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,试图可能与不可能小时后,我发现,IE(不同于FF或G.Chrome)支持动态生成的表使用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
+0

嗯生成自己的表...好课,谢谢。但是,当我执行了几个测试时,AJAX调用不是问题。问题在于在循环中检查表格的高度:'do { // getRow(id ++); document.write(testrow); id ++;在IE中,表似乎不会动态递增其clientHeight属性(在FF或G中时)。 Chrome它确实)。你有任何想法如何解决它在IE浏览器? – 2012-03-09 14:26:47