1. 程式人生 > >封裝好的Ajax呼叫函式以及基本方法總結

封裝好的Ajax呼叫函式以及基本方法總結

學了Ajax,今天來一個總結
首先什麼是Ajax:Asynchronous Javascript And XML”(非同步JavaScript和XML),是指一種建立互動式網頁應用的網頁開發技術。直白的說就是實現區域性重新整理:提升使用者的體驗。(jsp:同步方案(順序流執行的))

在Ajax中,有幾個技術要結合用:
靜態部分:HTML,CSS,用於美化外觀。
JavaScript:JavaScript可以操作DOM(文件物件模型)。
xml/json:資料交換。
XMLHTTPRequest物件:這是Ajax核心,用於非同步的訪問伺服器

現在來在一個JS檔案中建立並且封裝好一個Ajax基本建立函式。

    var xmlHttp;
    //建立了一個xmlhttprequest物件
    function createXMLHttpRequest() {
        if (window.XMLHttpRequest) { // 如果可以取得XMLHttpRequest
        xmlHttp = new XMLHttpRequest();  // Mozilla、Firefox、Safari 
        }else if (window.ActiveXObject) { // 如果可以取得ActiveXObject
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"
); // Internet Explorer } } //對外提供的請求方法 function startRequest(urlString,handleStateChange) { createXMLHttpRequest(); // 建立非同步請求 xmlHttp.onreadystatechange = handleStateChange; // 建立狀態改變呼叫的函式 xmlHttp.open("GET", urlString); // 開啟連線,注意,此處為GET請求,引數是明文顯示在後面的,所有下面的請求為空
xmlHttp.send(null); // 傳送請求 } function startRequestByPost(url,queryString,handleStateChange) { createXMLHttpRequest(); // 建立非同步請求 xmlHttp.onreadystatechange = handleStateChange; // 建立狀態改變呼叫的函式 xmlHttp.open("POST", url); //post請求,引數不能通過位址列傳遞,所有需要呼叫xmlHttp.send 傳遞引數 //application/x-www-form-urlencoded 將請求的引數放到http請求的實體部分,而不放在位址列上 xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xmlHttp.send(queryString); } //介面取id元素的值 function $(elementId){ return document.getElementById(elementId); }

這裡要注意:
get:明文顯示在位址列(長度512位元組)
post:位址列不現實,以http協議的實體方式來傳輸資料,理論上沒有長度限制

下面建立一個分別呼叫他們的頁面,檢視效果:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!doctype html>
<html>
  <head>
    <base href="<%=basePath%>">

    <title>My JSP 'index.jsp' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
  <script type="text/javascript" src="js/common.js"></script></head>

  <body>
    <a href="javascript:void" onclick="startRequest('hello.jsp?name=I am get',handleStateChange)">發出get請求</a>
      <a href="javascript:void" onclick="startRequestByPost('hello.jsp','name=I am post',handleStateChange)">發出post請求</a>


  </body>
</html>


<script>
    //非同步處理函式:當伺服器給客戶端響應時,會自動呼叫這個函式處理
    function handleStateChange(){
        //首先要判斷狀態
        //伺服器的就緒狀態
        if (xmlHttp.readyState == 4) { // 測試狀態是否請求完成
            if (xmlHttp.status == 200) { // 如果伺服器迴應OK
            alert("伺服器的相應" + xmlHttp.responseText);  // 這邊取到迴應的文字
            }
        }
    }
</script>

這裡要注意一個重要的引數是xmlHttp.responseText 可以取到迴應的資訊。
效果
分別呼叫JS的兩個方法

首先是get
呼叫的是startRequest(urlString,handleStateChange),要傳入的引數是:提交的地址?=引數名和引數,狀態改變的JavaScript函式。
這是get
然後是post
呼叫的是startRequestByPost(url,queryString,handleStateChange),要傳入的引數是:提交的地址,引數名和函式,狀態改變的JavaScript函式。區別就是引數是否跟在地址後面。
其次是post