AJAX Suggest執行個體

來源:互聯網
上載者:User
AJAX Suggest執行個體

在下面的 AJAX 例子中,我們會示範當使用者向一個標準的 HTML 表單中輸入資料時網頁如何與 網頁伺服器進行通訊。

在下面的文字框中輸入名字:

First Name:

Suggestions:Anna , Amanda

例子解釋 - HTML表單

表單的 HTML 程式碼:

<form>
First Name:<input type="text" id="txt1" onkeyup="showHint(this.value)" />

Suggestions: <span id="txtHint">

正如您看到的,這是一個簡單的帶有名為 "txt1" 輸入欄位的 HTML 表單。輸入欄位的事件屬性定義了一個由 onkeyup 事件觸發的函數。

表單下面的段落包含了一個名為 "txtHint" 的 span,這個 span 充當了由 網頁伺服器所取回的資料的位置預留位置。

當使用者輸入資料時,名為 "showHint()" 的函數就會被執行。函數的執行是由 "onkeyup" 事件觸發的。另外需要說明的是,當使用者在文本域中輸入資料時把手指從鍵盤按鍵上移開時,函數 showHint 就會被調用。

例子解釋 - showHint() 函數

showHint() 函數是一個位於 HTML 頁面 head 部分的很簡單的 JavaScript 函數。

此函數包含以下代碼:

function showHint(str)
{

if (str.length==0)
{
document.getElementById("txtHint").innerHTML="";
return;
}

xmlHttp=GetXmlHttpObject()

if (xmlHttp==null)
{
alert ("您的瀏覽器不支援AJAX!");
return;
}

var url="gethint.asp";
url=url+"?q="+str;
url=url+"&sid="+Math.random();
xmlHttp.onreadystatechange=stateChanged;
xmlHttp.open("GET",url,true);
xmlHttp.send(null);
}

每當有字元輸入文字框時,此函數就會執行。

假如文本域中存在某些輸入,函數就會執行:

  • 定義回傳資料的伺服器的 url(檔案名稱)
  • 使用文字框的內容向 url 添加參數(q)
  • 添加一個隨機的數字,以防止伺服器使用某個已緩衝的檔案
  • 建立一個 XMLHTTP 對象,並告知此對象當某個改變被觸發時執行名為 stateChanged 的函數
  • 向伺服器發送一個 HTTP 要求
  • 如果輸入欄位為空白,此函數僅僅會清空 txtHint 預留位置的內容
例子解釋 - GetXmlHttpObject() 函數

上面的例子可調用名為 GetXmlHttpObject() 的函數。

此函數的作用是解決為不同瀏覽器建立不同的 XMLHTTP 對象的問題。

這是此函數的代碼:

function GetXmlHttpObject()
{
var xmlHttp=null;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}

例子解釋 - stateChanged() 函數

stateChanged() 函數包含下面的代碼:

function stateChanged()
{
if (xmlHttp.readyState==4)
{
document.getElementById("txtHint").innerHTML=xmlHttp.responseText;
}
}

每當 XMLHTTP 對象的狀態發生改變時,stateChanged() 函數就會執行。

當狀態變更為 4(“完成”)時,txtHint 預留位置的內容就被響應文本來填充。

AJAX JavaScript

這是 JavaScript 代碼,儲存在檔案 "clienthint.js" 中:

var xmlHttp

function showHint(str)
{

if (str.length==0)
{
document.getElementById("txtHint").innerHTML="";
return;
}

xmlHttp=GetXmlHttpObject()

if (xmlHttp==null)
{
alert ("您的瀏覽器不支援AJAX!");
return;
}

var url="gethint.asp";
url=url+"?q="+str;
url=url+"&sid="+Math.random();
xmlHttp.onreadystatechange=stateChanged;
xmlHttp.open("GET",url,true);
xmlHttp.send(null);
}

function stateChanged()
{
if (xmlHttp.readyState==4)
{
document.getElementById("txtHint").innerHTML=xmlHttp.responseText;
}
}

function GetXmlHttpObject()
{
var xmlHttp=null;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}AJAX 伺服器頁面 - ASP 和 PHP

其實不存在什麼“AJAX 伺服器”。AJAX 頁面可以由任一網際網路伺服器提供服務。

在上一節的例子中被 JavaScript 調用的伺服器頁面是一個簡單的名為 "gethint.asp" 的 ASP 檔案。

下面我們列出了這個伺服器頁面代碼的執行個體,使用 ASP 來編寫。

AJAX ASP 執行個體

"gethint.asp" 頁面中的代碼針對 IIS 使用 VBScript 編寫。它會檢查一個名字數組,然後向用戶端返回相應的名字:

<%
response.expires=-1
dim a(30)

'用名字為數組賦值
a(1)="Anna"
a(2)="Brittany"
a(3)="Cinderella"
a(4)="Diana"
a(5)="Eva"
a(6)="Fiona"
a(7)="Gunda"
a(8)="Hege"
a(9)="Inga"
a(10)="Johanna"
a(11)="Kitty"
a(12)="Linda"
a(13)="Nina"
a(14)="Ophelia"
a(15)="Petunia"
a(16)="Amanda"
a(17)="Raquel"
a(18)="Cindy"
a(19)="Doris"
a(20)="Eve"
a(21)="Evita"
a(22)="Sunniva"
a(23)="Tove"
a(24)="Unni"
a(25)="Violet"
a(26)="Liza"
a(27)="Elizabeth"
a(28)="Ellen"
a(29)="Wenche"
a(30)="Vicky"

'從URL取得參數q
q=ucase(request.querystring("q"))

'如果q的長度大於0,則尋找所有的hint
if len(q)>0 then
hint=""
for i=1 to 30
if q=ucase(mid(a(i),1,len(q))) then
if hint="" then
hint=a(i)
else
hint=hint & " , " & a(i)
end if
end if
next
end if

'如果找不到hint,則輸出"no suggestion"
'或者輸出正確的值
if hint="" then
response.write("no suggestion")
else
response.write(hint)
end if
%>

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.