ThinkPHP對Ajax完全支援

來源:互聯網
上載者:User
ThinkPHP對Ajax完全支援ThinkPHP完全支援Ajax,並且還內建了一個SmartAjax和ThinkAjax類庫,你可以不通過任何其他Ajax類庫包就可以在ThinkPHP中使用Ajax支援。
首先說一下ThinkPHP的JS類庫以及如何在ThinkPHP中引入Js類庫

JS類庫
ThinkPHP架構內建了一個易於擴充的JS類庫,並且通過標籤庫技術和JS方法輕鬆匯入。
JS類庫的引入給ThinkPHP的發展和企業級應用開啟了新的一面,同時也給基於ThinkPHP的應用開發定義了一個相對簡單的JS匯入規範。這個規範類似於ThinkPHP基底類別庫的命名空間匯入方式,並且該規範同樣可以適用於CSS檔案的匯入。下面先看個例子:
基於標籤庫技術的JS類庫引入方法

  • <html:import type='js'
    file='Js.Base'
    /> html:import file='Js.Util.Calendar'
    />
  • <

使用html:import標籤 可以引入所需要的JS檔案,如果沒有指定type,則預設為js,import的根目錄可以設定,也可以通過basepath參數指定。以上的標籤就表示匯入 Js/Base.js、 Js/Util/Calendar.js、 ../public/Js/common.js。
這種方式的Js匯入是顯式的,除了以上標籤庫形式的匯入,ThinkPHP還支援隱式的JS方法匯入JS檔案。
在Base.js檔案中定義了_import方法,可以起到和html:import標籤類似的功能,例如:

  • <SCRIPT LANGUAGE='JavaScript'>
    ImportBasePath =
    'http://localhost/public/';
    _import('Js.Form.CheckForm');
    //--> </SCRIPT>
  • <!--

要使用_import方法在Js檔案中隱式匯入所需的JS類庫,前提是必須載入Base.js檔案和設定ImportBasePath 參數(即匯入根目錄),並且該方法只能匯入JS檔案。
除此之外,ThinkPHP提供的JS類庫還提供了基於檔案名稱方式匯入JS和CSS的方法:ImportJS和ImportCss。
ThinkPHP架構目前的JS類庫還比較有限,但是開發人員可以很方便的擴充自己的JS類庫,並且隨著ThinkPHP的不斷完善,也一定會提供更加豐富的JS類庫。
目前提供的類庫有:

  • Base.js JS基礎檔案
  • String目錄 字串操作擴充類
  • Util目錄 工具類庫
  • Form目錄 表單操作類庫

SmartAjax和ThinkAjax
SmartAjax 是一個Ajax類庫,純JS解決方案,參考了CoreAjax的某些功能實現,支援HTML元素和事件綁定Ajax操作、表單提交,並可以定時執行,支援更新效果。 ThinkAjax和ThinkPHP結合,在返回資料格式上面專門針對ThinkPHP作了處理,其他用法和SmartAjax類似。

主要屬性:
updateTip //更新提示資訊,支援HTML method //提交方法POST 或者GET effect //更新效果,採用mootools類庫,例如 {”font-size”:[0,25],”opacity”: [1,0.3]} 主要方法:

// 發送Ajax請求
send(提交URL,提交參數,結果顯示DIV對象或者ID,更新顯示效果,定時執行時間間隔)

// 發送表單Ajax操作
sendForm(表單對象或者ID,提交URL,結果顯示DIV對象或者ID,更新顯示效果)

// 綁定Ajax操作到HTML元素和事件
bind(源HTML元素或者ID,綁定事件,提交URL,提交參數,結果顯示DIV對象或者ID,更新效果)

// 頁面載入時候進行Ajax操作
load(提交URL,提交參數,結果顯示DIV對象或者ID,更新效果)

// 定時執行Ajax操作
repeat(提交URL,提交參數,結果顯示DIV對象或者ID,執行間隔,更新效果)

使用舉例:

  • // 載入需要的類庫
  • <script language='JavaScript'  src='/Js/prototype.js'></script>
    <script language='JavaScript' src='/Js/mootools.js'></script>
  • <script language='JavaScript' src='/Js/SmartAjax.js'></script> SmartAjax.updateTip = "更新中~";
  • SmartAjax.effect = {'font-size':[0,30],'opacity': [1,0.3]};
  • // 頁面載入時執行通過Ajax操作在後台執行load.php
  • SmartAjax.load('http://localhost/load.php',"name=thinkphp","result");
  • // 綁定click操作到id為run的html元素,執行Ajax
  • SmartAjax.bind('run','click','http://localhost/hello.php',"name=thinkphp","result");
  • // 每隔1秒種執行time.php,輸出
  • SmartAjax.repeat('http://localhost/time.php',"",$('timer'),1000);
  • // Ajax方式提交表單資料
  • SmartAjax.sendForm('login', APP+'/User/checkLogin/','result',doLogin);

Ajax檔案上傳
ThinkPHP架構內建了對Ajax檔案上傳(非真正Ajax)的實現。採用的是iframe的方式對檔案上傳進行支援。結合ThinkPHP的檔案上傳類,可以很方便地進行檔案上傳和批量上傳。下面是一個典型的檔案上傳範例程式碼:

  • <form id="upload"
    METHOD=POST action="__APP__/Attach/insert/"
    enctype="multipart/form-data"
    target="iframeUpload">
    INPUT TYPE="hidden"
    name="_AJAX_SUBMIT_"
    value="1">
    iframe name="iframeUpload"
    src=""
    width="350"
    height="35"
    frameborder=0 SCROLLING="no"
    style="display:none"></iframe>
    INPUT TYPE="hidden"
    name="_uploadFileResult"
    value="result">
    INPUT TYPE="hidden"
    name="_uploadFileType"
    value="jpg,gif,png"
    > INPUT TYPE="hidden"
    name="_uploadSaveRule"
    value="{$user.id}">
    INPUT TYPE="hidden"
    name="_uploadFormId"
    value="upload">
    INPUT TYPE="hidden"
    name="_uploadFileSize"
    value="20480"
    > INPUT TYPE="hidden"
    name="_uploadResponse"
    value="uploadComplete">
    INPUT TYPE="file"
    name="file">
    INPUT TYPE="submit"
    value="上傳"
    > form>
  • <
  • <
  • <
  • <
  • <
  • <
  • <
  • <
  • <
  • <
  • </

上傳完成後,ThinkPHP系統會在iframe裡面返回js代碼和資料,並根據自訂的方法更新頁面的result標籤。更多關於檔案上傳方面的掌握請看 檔案上傳類的使用教程

後端Ajax資料返回
SmartAjax是一個獨立的前端JS類庫,其運行並不需要後台支援。不過,在幕後處理和資料返回方面,結合ThinkPHP架構提供的一些完善處理,能夠使得背景開發效率提高。首先,在頁面使用Ajax方式提交的時候使用_AJAX_SUBMIT_隱藏變數或者ajax變數,後台能夠自動識別該操作為Ajax操作,並作出相應的處理。例如,表單提交Ajax方式,在form中添加
<INPUT TYPE="hidden" name="_AJAX_SUBMIT_" value="1">

如果使用SmartAjax.send方法提交操作,直接在參數裡面添加ajax變數

  • SmartAjax.send('url','ajax=1&name=thinkphp','result);

在後台Action類處理完畢後,簡單使用:
ajaxReturn($data,$info,$status) 來返回資料到用戶端,其中
$data 表示需要返回用戶端的資料,可以是字串、數組或者對象(經過JSON_ENCODE編碼,可以被js直接使用)
$info 表示提示資訊(例如操作成功、失敗等)
$status 表示操作狀態代碼(1表示成功 0 表示失敗 可以由應用自己定義,用戶端作相應處理就可以了)
通常的方式我們需要使用echo或者exit來輸出資料,並且還需要設定utf8編碼,最麻煩的是還要自己進行json編碼,使用AjaxReturn方法,一切都內建處理了。並且,另外一個方便之處是,不僅僅可以返回資料,還可以返回操作狀態(例如操作失敗還是成功)以及相關提示資訊。 ThinkPHP對於JSON的處理已經作了相容處理,無論是PHP4還是PHP5都可以直接使用JSON_ENCODE方法來對PHP對象、數組或者字串等類型直接編碼成JSON資料返回給用戶端由JS處理。

為了更好的擷取ThinkPHP後台Action的ajaxReturn方法返回的資訊,架構JS類庫中增加了一個ThinkAjax類庫為後台ajax資訊返回提供完全支援。 ThinkAjax類的使用和SmartAjax基本類似,只是簡化了操作,只需要在用戶端定義接受資料的處理方法,其他的由ThinkAjax類庫自動處理了,包括資訊提示。一個ThinkAjax的使用例子:

  • ThinkAjax.sendForm('formId','__URL__/action/',complete);
    complete(data,status,info){
    // 擷取返回資料,並進行處理 }
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.