PHP教程之Ajax進行Web開發(2)_PHP教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:淺談PHP數組讀取的循環操作
      PHP基本上就是一種數組語言。時常要進行大量的數組循環操作,主要有兩種方式,一種是foreach,另一種是while,到底哪種好哪種壞一直有爭論,雖然我很早就意識到了這個問題,但是一直沒有細究,懵懂的感覺一直持續到現在,為了以后能節省點CPU時間,下面總結

      //構建一個接受返回信息的層:

      我們看到上面的form表單里沒有需要提交目標等信息,并且提交按鈕的類型也只是button,那么所有操作都是靠onClick事件中的saveUserInfo()函數來執行了。我們描述一下這個函數:

      function saveUserInfo()

      {

      //獲取接受返回信息層

      var msg = document.getElementById("msg");

      //獲取表單對象和用戶信息值

      var f = document.user_info;

      var userName = f.user_name.value;

      var userAge = f.user_age.value;

      var userSex = f.user_sex.value;

      //接收表單的URL地址

      var url = "/save_info.php";

      //需要POST的值,把每個變量都通過&來聯接

      var postStr = "user_name=" userName "&user_age=" userAge "&user_sex=" userSex;

      //實例化Ajax

      var ajax = InitAjax();

      //通過Post方式打開連接

      ajax.open("POST", url, true);

      //定義傳輸的文件HTTP頭信息

      ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

      //發送POST數據

      ajax.send(postStr);

      //獲取執行狀態

      ajax.onreadystatechange = function() {

      //如果執行狀態成功,那么就把返回信息寫到指定的層里

      if (ajax.readyState == 4 && ajax.status == 200) {

      msg.innerHTML = ajax.responseText;

      }

      }

      }

      大致使用POST方式的過程就是這樣,當然,實際開發情況可能會更復雜,這就需要開發者去慢慢琢磨。

      4. 異步回調(偽Ajax方式)

      一般情況下,使用Get、Post方式的Ajax我們都能夠解決目前問題,只是應用復雜程度,當然,在開發中我們也許會碰到無法使用Ajax的時候,但是我們又需要模擬Ajax的效果,那么就可以使用偽Ajax的方式來實現我們的需求。

      偽Ajax大致原理就是說我們還是普通的表單提交,或者別的什么的,但是我們卻是把提交的值目標是一個浮動框架,這樣頁面就不刷新了,但是呢,我們又需要看到我們的執行結果,當然可以使用JavaScript來模擬提示信息,但是,這不是真實的,所以我們就需要我們的執行結果來異步回調,告訴我們執行結果是怎么樣的。

      假設我們的需求是需要上傳一張圖片,并且,需要知道圖片上傳后的狀態,比如,是否上傳成功、文件格式是否正確、文件大小是否正確等等。那么我們就需要我們的目標窗口把執行結果返回來給我們的窗口,這樣就能夠順利的模擬一次Ajax調用的過程。

      以下代碼稍微多一點, 并且涉及Smarty模板技術,如果不太了解,請閱讀相關技術資料。

      上傳文件:upload.html

      //上傳表單,指定target屬性為浮動框架iframe1

      選擇要上傳的圖片:

      //顯示提示信息的層

      //用來做目標窗口的浮動框架

      處理上傳的PHP文件:upload.php

      /* 定義常量 */

      //定義允許上傳的MIME格式

      define("UPLOAD_IMAGE_MIME", "image/pjpeg,image/jpg,image/jpeg,image/gif,image/x-png,image/png");

      //圖片允許大小,字節

      define("UPLOAD_IMAGE_SIZE", 102400);

      //圖片大小用KB為單位來表示

      define("UPLOAD_IMAGE_SIZE_KB", 100);

      //圖片上傳的路徑

      define("UPLOAD_IMAGE_PATH", "./upload/");

      //獲取允許的圖像格式

      $mime = explode(",", USER_FACE_MIME);

      $is_vaild = 0;

      //遍歷所有允許格式

      foreach ($mime as $type)

      {

      if ($_FILES['image']['type'] == $type)

      {

      $is_vaild = 1;

      }

      }

      //如果格式正確,并且沒有超過大小就上傳上去

      if ($is_vaild && $_FILES['image']['size']<=USER_FACE_SIZE && $_FILES['image']['size']>0)

      {

      if (move_uploaded_file($_FILES['image']['tmp_name'], USER_IMAGE_PATH . $_FILES['image']['name']))

      {

      $upload_msg ="上傳圖片成功!";

      }

      else

      {

      $upload_msg = "上傳圖片文件失敗";

      }

      }

      else

      {

      $upload_msg = "上傳圖片失敗,可能是文件超過". USER_FACE_SIZE_KB ."KB、或者圖片文件為空、或文件格式不正確";

      }

      //解析模板文件

      $smarty->assign("upload_msg", $upload_msg);

      $smarty->display("upload.tpl");

      ?>

      模板文件:upload.tpl

      {if $upload_msg != ""}

      callbackMessage("{$upload_msg}");

      {/if}

      //回調的JavaScript函數,用來在父窗口顯示信息

      function callbackMessage(msg)

      {

      //把父窗口顯示消息的層打開

      parent.document.getElementById("message").style.display = "block";

      //把本窗口獲取的消息寫上去

      parent.document.getElementById("message").innerHTML = msg;

      //并且設置為3秒后自動關閉父窗口的消息顯示

      setTimeout("parent.document.getElementById('message').style.display = 'none'", 3000);

      }

      使用異步回調的方式過程有點復雜,但是基本實現了Ajax、以及信息提示的功能,如果接受模板的信息提示比較多,那么還可以通過設置層的方式來處理,這個隨機應變吧。

      [ 結束語 ]

      這是一種非常良好的Web開發技術,雖然出現時間比較長,但是到現在才慢慢火起來,也希望帶給Web開發界一次變革,讓我們朝RIA(富客戶端)的開發邁進,當然,任何東西有利也有弊端,如果過多的使用JavaScript,那么客戶端將非常臃腫,不利于用戶的瀏覽體驗,如何在做到快速的親前提下,還能夠做到好的用戶體驗,這就需要Web開發者共同努力了。

      分享:談PHP開發者必不可少的五個發展要素
      語法結構教科書上的知識和實際的程序設計是有區別的,真正的知識要在實際的開發中獲得。每個php的開發人員在開始開發web應用程序之前,都應該熟悉下面的五件事: 1. 框架 框架可以說是php開發中的一個最重要的問題。用php開發web應用程序時有很多方法,有很

      共2頁上一頁12下一頁
      來源:模板無憂//所屬分類:PHP教程/更新時間:2009-05-17
      相關PHP教程