web技巧記錄

1,如何顯示隱藏table中的一行:
    a, 爲顯示或隱藏的<tr>設置id屬性,以便於引用該行,如:<tr id='idDynamicDisplay'>。
    b, 隱藏該行:document.getElementById('idDynamicDisplay').style.display='none';
    c, 顯示該行:document.getElementById('idDynamicDisplay').style.display='';
 注意事項:顯示時指定爲block會使得table的行數不斷遞增,並混亂,必須指定爲空。
 相關說明:對比visibility屬性,display不會爲對象保留其佔據的物理空間。如果使用visibility,就會發現<tr>
           所在位置被背景色所填充。style.display及style.visibility可作用於很多對象。
    相關鏈接:動態添加表格行(http://dev.csdn.net/author/Rayfly/f37a22310855463d9846857c858f471d.html)
2, php用於被包含的文件的後綴名該用什麼(php還是inc)
 用inc使文件的用途較清晰,不過我在網上看到一篇帖子,說.inc文件在直接通過遊覽器訪問時會被下載(php可不會解析它),如果沒加密就麻煩了。所以我打算以後用.inc.php作後綴名,好像後綴名長了點。
3,php模板類HTML_Template_IT的進一步使用
 pear手冊中的那個例子太簡單了,如果php代碼中要對html模板文件中出現的所有變量一一進行手工設置的話,我可能更願意將php和html混寫。我希望寫出像下面這樣的代碼:
    //在最後設置語言文本
 foreach($arrLang as $key=>$value)
       $tpl->setVariable('LANG_'.strtoupper($key), $value);
   //這裏通常就是輸出: $tpl->show();
上面的代碼的希望最後將處理後的模板中的語言文本變量統一地替換爲本地語言(如:"{LANG_WELCOME}"替換爲"歡迎觀臨"),當你的模板中使用了嵌套塊時,在解析每一塊時都調用一次上面的代碼是非常糟糕的,而且當解析外層時,如果外層中沒有名爲'LANG_'.strtoupper($key) 的變量而內層中卻有該名稱的變量時,你會發現顯示的內容中多出了一行(或多行)發育不全的裏層內容,具體原因我也不太清楚(沒有找到 HTML_Template_IT類的詳細使用的資料,實現源代碼看得也不太明白)。經過半猜半試驗,有了使以上代碼正確動作的方法:
#不要按pear中的示例哪樣裝入模板,並進行設置
$tpl->loadTemplatefile('main.tpl.htm', false, true);   /*第二個參數設置爲false,使解析內層變量時,其中無法解析的語言文本變量仍保留,以便隨後在最外層解析時可替換這些變量*/
$tpl->clearCacheOnParse = true; /*不加此句導致結果中可能多出了一行(或多行)發育不全的裏層內容*/
......處理各塊......
#在顯示模板之前清理掉未知變量
$tpl->removeUnknownVariables = true;
$tpl->show();

(本條技巧剛剛試出,有待隨後實際開發中的檢驗,本人是初學者,如發現我寫的有謬誤,還請留言相告,不慎感激!)
4,運用ajax進行網頁部分內容的自動刷新。
  《ajax基礎教程》上有類似例子,我想要的是一個更簡單的例子,嘗試寫過一個,但這小小的代碼塊常常在IE6下運行出錯或結果異常,現在把調通後的代碼貼在下面,免得再浪費時間。
  ///////////////////////////////////////////
  //客戶端代碼:AutoUpdate.html
  ///////////////////////////////////////////
 <html>
  <head>
   <script language="JavaScript" type="text/JavaScript">
    /*創建xmlHttp對象*/
    var xmlHttp;
    if (window.ActiveXObject)
     xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    else if(window.XMLHttpRequest)
     xmlHttp = new XMLHttpRequest();
    
    /*開始進行自動更新*/
    function doStart()
    {
     var url = "AutoUpdate.php";
     xmlHttp.open("GET",url,true);
     xmlHttp.onreadystatechange = startCallback;
     xmlHttp.send(null);
    }
    
    /*回調函數*/
    function startCallback()
    {
     if(xmlHttp.readyState==4)
     {
      /*用異步獲取的信息更新網頁*/
      if(xmlHttp.status==200)
       document.getElementById('info').innerHTML = xmlHttp.responseText;
      else if(xmlHttp.status==404)
       document.getElementById('info').innerHTML = "處理頁面無法訪問";
      else
       document.getElementById('info').innerHTML = "響應異常:"+xmlHttp.status;
      setTimeout('doStart()', 3000);
     }
    }
   </script>  
  </head>
  <body>
   <div id="info"></div>
   <input type="button" value="start" onClick="doStart()" />
  </body>
 </html>
 ///////////////////////////////////////////
  //服務器端代碼:AutoUpdate.php
  ///////////////////////////////////////////
  //禁用緩存
 header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");   // 過去的時間
 echo date('Y-m-d H:i:s');

5,php編碼中常犯的錯誤:
    5.1,用isset去檢測array中某個鍵是否被設置,事實上當key對應的值爲NULL時是檢測不到的,
        所以得注意設置數組中的空值時,不要使用NULL。
    5.2,$_SERVER['REQUEST_URI']是訪問此頁面所需的URI,我通常用於將它傳遞給處理頁面,
        然後處理頁面再跳轉到本頁面,不過要注意:當前頁面的FORM的METHOD屬性爲post時,這個
        URI可是不帶參數的喔(沒有$_SERVER['QUERY_STRING']部分),所以要用get方式的form。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章