DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> AJAX入門 >> AJAX詳解 >> AJAX Hacks 之HACK2. 使用Request對象與服務器進行數據傳遞
AJAX Hacks 之HACK2. 使用Request對象與服務器進行數據傳遞
編輯:AJAX詳解     
AJax Hacks 之HACK2. 使用Request對象與服務器進行數據傳遞

以傳統的傳送表單數據的方式開始,本節介紹使用post方法發送數據,與服務器進行通信,而在這個過程中不會出現頁面刷新現象。然後顯示服務器相應的信息。

頁面很簡單,就是一個表單,要求用戶輸入姓名、性別、國家或地區。輸入完畢用戶可以提交表單。(具體圖示見原文)

頁面的Html代碼如下:
“http://www.w3.org/TR/1999/REC-Html401–19991224/strict.dtd”>
“text/Javascript“ src=“/parkerriver/js/hack2.JS”>

A Few Facts About Yourself...

Javascript:void%200>
<"setQueryString();sendData();return false">

First name:



Last name:



Gender:



Country of origin:





其中 用來加載js文件。submit按鈕將調用setQueryString()和sendData()這兩個函數。他們的作用分別是取得並設置請求的數據格式、傳送數據到服務器。hack2.JS 文件中有兩個函數的完整實現。下面的代碼是函數setQueryString():

function setQueryString(){

//initialize the top-level variable; also reset the variable to cover when

//the user clicks multiple times

queryString=“”;

var frm = document.forms[0];

var numberElements = frm.elements.length;

for(var i = 0; i < numberElements; i++) {

if(i < numberElements-1) {

queryString = frm.elements[i].name"="+frm.elements[i].value+"&";

} else {

queryString = frm.elements[i].name"="+frm.elements[i].value;

}

}

}

這個函數的功能簡單來說就是取得form中每個輸入元素的值,將他們以一定的格式保存到queryString變量中。其格式形如:firstname=Bruce&lastname=Perry&gender=M&country=USA.

當表單的元素個數發生變化時,函數也不必作出修改。

將表單中的數據存入queryString後,就可以通過http post向服務器發送請求了。接下來看一下這部分的代碼。如前所述,提交表單時,調用setQueryString函數以後,接下來將調用函數sendData():

var request;

var queryString; //用來保存表單數據

function sendData(){

setQueryString();

var url=“http://www.parkerriver.com/s/sender”;

httpRequest(“POST”,url,true);

}

//event handler for XMLHttpRequest

function handleCheck(){

if(request.readyState == 4){

if(request.status == 200){

alert(request.responseText);

} else {

alert(“A problem occurred with communicating between the XMLHttpRequest object and the server program.”;

}

}//end outer if

}

/* Initialize a Request object that is already constructed */

function initReq(reqType,url,bool){

/* Specify the function that will handle the HTTP response */

request.onreadystatechange=handleCheck;

request.open(reqType,url,bool);

request.setRequestHeader(“Content-Type”,

“application/x-www-form-urlencoded; charset=UTF-8”;

request.send(queryString);

}

/* Wrapper function for constructing a Request object.

Parameters:

reqType: The HTTP request type such as GET or POST.

url: The URL of the server program.

asynch: Whether to send the request asynchronously or not. */

function httpRequest(reqType,url,asynch){

//Mozilla-based browsers

if(window.XMLHttpRequest){

request = new XMLHttpRequest();

} else if (window.ActiveXObject){

request=new ActiveXObject(“Msxml2.XMLHTTP”;

if (! request){

request=new ActiveXObject(“Microsoft.XMLHTTP”;

}

}

//the request could still be null if neither ActiveXObject

//initializations succeeded

if(request){

initReq(reqType,url,asynch);

} else {

alert(“Your browser does not permit the use of all ”+

“of this application‘s features!”;}

}

函數httpRequest()用來檢查客戶的浏覽器的request對象的類型。其中調用了函數initReq(),兩者的參數是相同的。

代碼request.onreadystatechange=handleResponse;用來指定處理響應的函數。稍後將介紹這個函數。接下來調用request對象的open()方法,為對象發送請求做准備。

The code can set any request headers after calling open(). In our case, we have to create a Content-Type header for a POST request.

設置Headers

在open函數調用後,代碼將設置request haders。在本例中,我們將為post請求創建一個Content-Type header

注意:設置好的header是良好的習慣。

設置headers並發送請求的代碼如下:

request.setRequestHeader("Content-Type",

“application/x-www-form-urlencoded; charset=UTF-8”;

request.send(queryString);

如果使用queryString的值作為參數,send方法就形如:send("firstname=Bruce&lastname=Perry&gender=M&country=USA");

處理結果

發送完請求數據後,接下來要做的就是為用戶顯示結果了。這就是函數handleResponse()所要做的事情了(不要忘記函數initReq()中的這句:request.onreadystatechange=handleResponse;)。當request對象的readyState屬性為4時,表示操作已經完成,然後檢查一下HTTP 響應狀態是不是200。該值表示HTTP請求成功。接下來彈出窗口用來顯示響應結果responseText。這顯然有些唐突,但我認為這樣比較簡單,相對那些功能復雜的例子來說更適合初學者。

//event handler for XMLHttpRequest

function handleResponse(){

if(request.readyState == 4){

if(request.status == 200){

alert(request.responseText); //彈出請求響應的數據

} else {

alert(“A problem occurred with communicating between ”+

“the XMLHttpRequest object and the server program.”;

}

}//end outer if

}

讀者需要重點理解AJax的發送請求,處理響應的機制。

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved