Ajax簡單例子


Ajax(Asynchronous Javascript+XML)是一種以異步方式從服務器獲取數據的技術,用戶單擊了一個鏈接,不用重新載入整個頁面,也能夠獲取新的數據。

 

創建XHR(XMLHttpRequest的簡稱)對象的時候,IE瀏覽器和非IE瀏覽器是不同的:

var xhr;

xhr = new ActiveXObject('Microsoft.XMLHTTP');   //IE瀏覽器

xhr = new XMLHttpRequest();     //非IE瀏覽器

 

open()函數

eg.

xhr.open("get","example.php",false);

第一個參數:"get"、"post"等

第二個參數:URL,相對於當前頁面或絕對路徑

第三個參數:true/false,是否異步發送請求

 

send()函數

必須有一個參數,作為請求主體發送的數據,不需要通過請求主體發送數據必須傳入null

 

XHR對象的屬性

responseText:作為相應主體被返回的文本

responseXML:如果響應內容是"text/xml"或"application/xml",這個屬性中將保存包含着相應數據的XML文檔,對於非XML數據,屬性值為null

status:響應的HTTP狀態

200-成功

304-請求的資源沒有被修改,可以使用瀏覽器緩存的版本

statusText:HTTP的狀態說明

readyState:請求/響應過程中的當前活動階段

0-未初始化,尚未調用open()方法

1-啟動。已調用open()方法,尚未調用send()方法

2-發送。已調用send()方法,還沒收到響應

3-接收。已接收到部分響應數據

4-完成。已經全部接收

只要readyState屬性值發生改變,都會觸發一次readyStatechange事件,觸發函數例子:

xhr.onreadystatechange = function(){do something...};

 

abort()函數

接收到響應之前用於取消異步請求

 

下面的例子是跟着php100視頻教程寫的,這是個很好的學PHP的教程,視頻可以到php100網站下載。

這里用了3個文件:index.html , ajax.js , for.php

點擊index.html的鏈接,會觸發ajax.js中的Fetch函數,然后ajax.js中的Fetch函數取到for.php中的數據之后,顯示在index.html頁面上。

index.html文件:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    <script type="text/javascript" src="ajax.js"></script>
</head>
<body>

    <a href="#" onclick="Fetch('1')">1</a>
    <a href="for.php?id=2">2</a>
    <a href="for.php?id=3">3</a>
<div id="show"></div>
</body>
</html>

ajax.js文件:

var xmlHttp;
function S_xmlhttprequest()
{
    if(window.ActiveXObject)
        {xmlHttp = new ActiveXObject('Microsoft.XMLHTTP');//alert("IE瀏覽器!");
        }
    else if(window.XMLHttpRequest)
        {xmlHttp = new XMLHttpRequest();//alert("非IE瀏覽器!");
        }
}

function Fetch(url)
{
    S_xmlhttprequest();
    xmlHttp.open("get","for.php?id="+url,true);
    xmlHttp.onreadystatechange = Response;
    xmlHttp.send(null);
}

function Response()
{
    if(xmlHttp.readyState == 1)
    {
        document.getElementById('show').innerHTML = "loading...";
    }
    if(xmlHttp.readyState == 4)
    {
       if(xmlHttp.Status == 200)
           {
           var v = xmlHttp.responseText;
           document.getElementById("show").innerHTML = v;
           }
    }
}

for.php文件:

<?php

$id = $_GET['id'];
sleep(2); //停頓兩秒,顯示loading……效果,但是只有IE9可以,Chrome和Opera不行,不知為何
if($id) { for($i = 0; $i < 10; $i++) echo $id; } exit(); ?>

 

上面例子在IE9中測試沒問題,但在Chrome和Opera中點了1之后要么就沒反應,要么就一直顯示loading,不知是什么情況,還沒找到問題所在。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM