代碼免費:Ajax即時驗證"使用者名稱/郵箱等"是否已經存在(含有資料庫sql檔案)
一個網站採用Ajax技術,不僅可以改善網站的使用者體驗性,而且大大節約了寶貴的頻寬,減輕了伺服器負荷(不再需要互動整個網頁內容,而是局部)。
今天分享一個“利用Ajax技術來檢測使用者名稱是否存在”的例子。
利用Ajax技術來檢測使用者名稱是否存在的原理流程圖:
最終結果:
index.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2 <html xmlns="http://www.w3.org/1999/xhtml">
3 <head>
4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5 <title>Ajax檢測使用者名稱</title>
6 <script type="text/javascript" src="ajax.js"></script>
7 </head>
8 <body>
9 <form name="myform">
10 使用者名稱:<input type="text" name="user" onblur="checkname();">
11 <span id="checkbox"></span>
12 </form>
13 </body>
14 </html>
代碼解釋:
①實現該功能的核心代碼在ajax.js,需要另外引進
②給form命名,因為後面我們需要利用JS來取得input框中的value
③給input框添加一個“onblur”事件,即當“焦點”失去時觸發該事件(即流程圖的“觸發控制項”)
④<span id="checkbox"></span>用來放從伺服器發送回來的資料(即“使用者名稱已存在”等)
checkname.php
1 <?php
2 mysql_connect("localhost",'root','');
3 mysql_select_db('test');
4 $sql="select * from ajax where name='$_GET[id]'";
5 $query=mysql_query($sql);
6 if(is_array(mysql_fetch_array($query))){
7 echo "<font color=red>使用者名稱已存在</font>";
8 }else{
9 echo "<font color=green>使用者名稱可以使用</font>";
10 }
11 ?>
代碼解釋:
通過ajax的open方法,將使用者輸入”使用者名稱“通過id傳遞給進來(即$_GET[id]),此時將對指定的資料庫表中進行查詢,檢查是否有存在該“使用者名稱”
ajax.js
1 // JavaScript Document
2 var XHR; //定義一個全域對象
3 function createXHR(){ //首先我們得建立一個XMLHttpRequest對象
4 if(window.ActiveXObject){//IE的低版本系類
5 XHR=new ActiveXObject('Microsoft.XMLHTTP');//之前IE壟斷了整個瀏覽器市場,沒遵循W3C標準,所以就有了這句代碼。。。但IE6之後開始有所改觀
6 }else if(window.XMLHttpRequest){//非IE系列的瀏覽器,但包括IE7 IE8
7 XHR=new XMLHttpRequest();
8 }
9 }
10 function checkname(){
11 var username=document.myform.user.value;
12 createXHR();
13 XHR.open("GET","checkname.php?id="+username,true);//true:表示非同步傳輸,而不等send()方法返回結果,這正是ajax的核心思想
14 XHR.onreadystatechange=byhongfei;//當狀態改變時,調用byhongfei這個方法,方法的內容我們另外定義
15 XHR.send(null);
16 }
17 function byhongfei(){
18 if(XHR.readyState == 4){//關於Ajax引擎對象中的方法和屬性,可以參考我的另一篇博文:http://www.cnblogs.com/hongfei/archive/2011/11/29/2265377.html
19 if(XHR.status == 200){
20 var textHTML=XHR.responseText;
21 document.getElementById('checkbox').innerHTML=textHTML;
22 }
23 }
24 }
代碼解釋:
①首先我們需要聲明一個ajax引擎的對象:XHR(隨便命名一個)
②因為微軟的低版本IE和其他的瀏覽器建立ajax對象的方式不一樣,現在IE和其他瀏覽器的市場份額幾乎各佔一半,所以我們得兩方面都考慮到,IE-->ActiveXObject;其他-->XMLHttpRequest。我將她封裝在一個函數中:createXHR
③我們在index.html中指定的當失去“焦點”時就會觸發checkname()函數。那麼我們如何將使用者輸入的“使用者名稱”捕獲呢?這裡,利用js即可輕鬆捕獲到document.myform.user.value(現在知道為何給form和input命名了吧,這一步對應流程圖的“獲得填寫內容”),有興趣的博友,可以試試在createXHR()的前一行敲行代碼(alert(username)),將捕獲到的使用者名稱彈出試試看。
④Ajax引擎有幾個方法和屬性(可以參考我的另一篇博文:看圖理解:普通互動方式和Ajax互動方式區別),使用之前我們得先調用函數craateXHR建立一個ajax對象
⑤有了ajax對象,有三個方法是必不可少的:open()、onreadystatechange、send()。
- 將請求發送到伺服器,要使用open ()和send()方法
- open()方法的第一個參數,指示採用GET或者POST方式進行傳輸。。。。。。
- open()方法的第二個參數,指示要請求的URL地址(這裡我們請求的是checkname.php檔案),可以是絕對或相對位址
- open()方法的第三個參數async指示是否採用非同步請求,true為採用,這種情況下,通過ajax、js無需等待伺服器響應,而是:①在等待伺服器響應的同時執行其他指令碼②當響應就緒後對響應進行處理。一般對一些小型的請求,async=false也是可以的,但此時就不要編寫onreadystatechange 函數了
- onreadystatechange事件:當ajax的屬性readyState改變時,就觸發此事件。在此事件中,當伺服器響應已做好被處理的準備時(即readyState=4且status=200時),我們規定要讓伺服器做什麼任務,這裡我們規定將從資料庫檢索到的結果輸出到id為”checkbox“的span標籤中。
⑥通過checkname.php,查詢資料庫後,將得到查詢結果(即伺服器的響應,對應流程圖中的”查詢資料庫“),此時資料還在ajax引擎中,如需獲得該來自伺服器的響應,我們需要使用XMLHttpRequest對象的responText或responseXML屬性,並通過DOM屬性innerHTML將從伺服器響應回來的資料設定為id=”checkbox“的span標籤的值
註:利用ajax監測郵箱是否存在一個道理,我們還可以利用ajax即時監測使用者輸入的密碼強度,此時,需要用到可以把onblur事件改為onfocus事件。
- 原創文章:WEB開發_小飛
- 轉載請註明 Ajax檢測"使用者名稱/密碼等"是否存在: http://www.cnblogs.com/hongfei/archive/2011/11/29/ajax_chekname.html