什麼是AJAX? AJAX = Asynchronous JavaScript and XML(非同步的 JavaScript 和 XML)。 AJAX 不是新的編程語言,而是一種使用現有標準的新方法。 AJAX 最大的優點是在不重新載入整個頁面的情況下,可以與伺服器交換數據並更新部分網頁內容。 AJ ...
什麼是AJAX?
AJAX = Asynchronous JavaScript and XML(非同步的 JavaScript 和 XML)。 AJAX 不是新的編程語言,而是一種使用現有標準的新方法。 AJAX 最大的優點是在不重新載入整個頁面的情況下,可以與伺服器交換數據並更新部分網頁內容。 AJAX 不需要任何瀏覽器插件,但需要用戶允許JavaScript在瀏覽器上執行。 AJAX 應用- 運用XHTML+CSS來表達資訊;
- 運用JavaScript操作DOM(Document Object Model)來執行動態效果;
- 運用XML和XSLT操作資料;
- 運用XMLHttpRequest或新的Fetch API與網頁伺服器進行非同步資料交換;
- 註意:AJAX與Flash、Silverlight和Java Applet等RIA技術是有區分的。
xmlhttp=new XMLHttpRequest();
老版本的 Internet Explorer (IE5 和 IE6)使用 ActiveX 對象:
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
為了應對所有的現代瀏覽器,包括 IE5 和 IE6,請檢查瀏覽器是否支持 XMLHttpRequest 對象。如果支持,則創建 XMLHttpRequest 對象。如果不支持,則創建 ActiveXObject :
var xmlhttp; if (window.XMLHttpRequest) { // IE7+, Firefox, Chrome, Opera, Safari 瀏覽器執行代碼 xmlhttp=new XMLHttpRequest(); } else { // IE6, IE5 瀏覽器執行代碼 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); }
2、向伺服器發送請求: 使用XMLHttpRequest 對象的open()和send();
xmlhttp.open("GET","/try/ajax/demo_get.php",true); xmlhttp.send();
在上面的例子中,您可能得到的是緩存的結果。 為了避免這種情況,請向 URL 添加一個唯一的 ID:
xmlhttp.open("GET","/try/ajax/demo_get.php?t=" + Math.random(),true); xmlhttp.send();
如果您希望通過 GET 方法發送信息,請向 URL 添加信息:
xmlhttp.open("GET","/try/ajax/demo_get2.php?fname=Henry&lname=Ford",true); xmlhttp.send();
一個簡單 POST 請求:
xmlhttp.open("POST","/try/ajax/demo_post.php",true); xmlhttp.send();
如果需要像 HTML 表單那樣 POST 數據,請使用 setRequestHeader() 來添加 HTTP 頭。然後在 send() 方法中規定您希望發送的數據:
xmlhttp.open("POST","/try/ajax/demo_post2.php",true); xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); xmlhttp.send("fname=Henry&lname=Ford");
xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("myDiv").innerHTML=xmlhttp.responseText; } }
有多個AJAX請求任務時,可將創建 XMLHttpRequest 對象及步驟封裝起來,使用回調函數,如下: 註:沒將發生 onreadystatechange 事件時執行的任務步驟封裝進去,是因為每次調用可能不盡相同。
var xmlhttp; function loadXMLDoc(url,cfunc) { if (window.XMLHttpRequest) {// IE7+, Firefox, Chrome, Opera, Safari 代碼 xmlhttp=new XMLHttpRequest(); } else {// IE6, IE5 代碼 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=cfunc; xmlhttp.open("GET",url,true); xmlhttp.send(); } function myFunction() { loadXMLDoc("/try/ajax/ajax_info.txt",function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("myDiv").innerHTML=xmlhttp.responseText; } }); }xmlhttp.readyState的值及解釋: 0:請求未初始化(還沒有調用 open())。 1:請求已經建立,但是還沒有發送(還沒有調用 send())。 2:請求已發送,正在處理中(通常現在可以從響應中獲取內容頭)。 3:請求在處理中;通常響應中已有部分數據可用了,但是伺服器還沒有完成響應的生成。 4:響應已完成;您可以獲取並使用伺服器的響應了。 xmlhttp.status的值及解釋: 100——客戶必須繼續發出請求 101——客戶要求伺服器根據請求轉換HTTP協議版本 200——交易成功 201——提示知道新文件的URL 202——接受和處理、但處理未完成 203——返回信息不確定或不完整 204——請求收到,但返回信息為空 205——伺服器完成了請求,用戶代理必須複位當前已經瀏覽過的文件 206——伺服器已經完成了部分用戶的GET請求 300——請求的資源可在多處得到 301——刪除請求數據 302——在其他地址發現了請求數據 303——建議客戶訪問其他URL或訪問方式 304——客戶端已經執行了GET,但文件未變化 305——請求的資源必須從伺服器指定的地址得到 306——前一版本HTTP中使用的代碼,現行版本中不再使用 307——申明請求的資源臨時性刪除 400——錯誤請求,如語法錯誤 401——請求授權失敗 402——保留有效ChargeTo頭響應 403——請求不允許 404——沒有發現文件、查詢或URl 405——用戶在Request-Line欄位定義的方法不允許 406——根據用戶發送的Accept拖,請求資源不可訪問 407——類似401,用戶必須首先在代理伺服器上得到授權 408——客戶端沒有在用戶指定的餓時間內完成請求 409——對當前資源狀態,請求不能完成 410——伺服器上不再有此資源且無進一步的參考地址 411——伺服器拒絕用戶定義的Content-Length屬性請求 412——一個或多個請求頭欄位在當前請求中錯誤 413——請求的資源大於伺服器允許的大小 414——請求的資源URL長於伺服器允許的長度 415——請求資源不支持請求項目格式 416——請求中包含Range請求頭欄位,在當前請求資源範圍內沒有range指示值,請求也不包含If-Range請求頭欄位 417——伺服器不滿足請求Expect頭欄位指定的期望值,如果是代理伺服器,可能是下一級伺服器不能滿足請求 500——伺服器產生內部錯誤 501——伺服器不支持請求的函數 502——伺服器暫時不可用,有時是為了防止發生系統過載 503——伺服器過載或暫停維修 504——關口過載,伺服器使用另一個關口或服務來響應用戶,等待時間設定值較長 505——伺服器不支持或拒絕支請求頭中指定的HTTP版本 合起來: 1xx:信息響應類,表示接收到請求並且繼續處理 2xx:處理成功響應類,表示動作被成功接收、理解和接受 3xx:重定向響應類,為了完成指定的動作,必須接受進一步處理 4xx:客戶端錯誤,客戶請求包含語法錯誤或者是不能正確執行 5xx:服務端錯誤,伺服器不能正確執行一個正確的請求 xmlhttp.readyState==4 && xmlhttp.status==200的解釋:請求完成並且成功返回