1. 程式人生 > >原生AJAX和jQuery ajax的使用和區別

原生AJAX和jQuery ajax的使用和區別

#Ajax簡介

Ajax被認為是(Asynchronous(非同步) JavaScript And Xml的縮寫)。現在,允許瀏覽器與伺服器通訊而無須重新整理當前頁面的技術都被叫做Ajax.

  • 同步是指:傳送方發出資料後,等接收方發回響應以後才發下一個數據包的通訊方式。
  • 非同步是指:傳送方發出資料後,不等接收方發回響應,接著傳送下個數據包的通訊方式 。

##1.原生JavaScript寫法:
原生js寫ajax就像打電話

打電話分下面4步

1.拿出手機
2.撥號
3.說話
4.挺對方說話

ajax也分下面4步

1.建立ajax物件
2.連線到伺服器
3.傳送請求(告訴伺服器我要什麼檔案)
4.接收返回值

#####readyState與status:

######readyState有五種狀態:

0 (未初始化): (XMLHttpRequest)物件已經建立,但還沒有呼叫open()方法;
1 (載入):已經呼叫open() 方法,但尚未傳送請求;
2 (載入完成): 請求已經發送完成;
3 (互動):可以接收到部分響應資料;
4 (完成):已經接收到了全部資料,並且連線已經關閉。

而status實際是一種輔狀態判斷,只是status更多是伺服器方的狀態判斷。status的狀態有幾十種,只列出平時常用的幾種:

100——客戶必須繼續發出請求
  101——客戶要求伺服器根據請求轉換HTTP協議版本
  200——成功
  201——提示知道新檔案的URL
  300——請求的資源可在多處得到
  301——刪除請求資料
  404——沒有發現檔案、查詢或URl
  500——伺服器產生內部錯誤

####具體程式碼:


var xhr;
  function rukou()//入口函式
  {
   xhr=getxhr();
   if(xhr==null)
   {
    alert("瀏覽器不支援!");
   }
   var url="";
   xhr.onreadystatechange=fanhui;
   xhr.open("GET",url,true);
   xhr.send(null);
  }
  function fanhui()//請求成功的回撥函式
  {
   if(readyState==4)
   {
    document.getElementById("xx").innerHTML=xhr.responseText;
   }
  }
  function getxhr()//獲取xmlhttp物件
  {
   xhr=null;
   try{
    xhr=new XMLHttpRequest();
   }
   catch(e)
   {//針對IE6,IE5.5,IE5     
    xhr=new ActiveXObject("Microsoft.XMLHTTP");
   }
  }

##2.jQuery寫法

<!DOCTYPE HTML>
<html>
<head>
<script type="text/javascript" src="Public/js/jquery-easyui-1.3.1/jquery-1.8.2.min.js"></script>
<script type="text/javascript">
    $(function(){
        //按鈕單擊時執行
        $("#testAjax").click(function(){
              
              //Ajax呼叫處理
            var html = $.ajax({
               type: "POST",
               url: "xxx",
               data: "name=garfield&age=18",
               async: false

            }).responseText;
            $("#myDiv").html('<h2>'+html+'</h2>');
         });
    });
</script>    
</head>
    <body>
        <div id="myDiv"><h2>通過 AJAX 改變文字</h2></div>
        <button id="testAjax" type="button">Ajax改變內容</button>
    </body>
</html>

也可以

<!DOCTYPE HTML>
<html>
<head>
<script type="text/javascript" src="Public/js/jquery-easyui-1.3.1/jquery-1.8.2.min.js"></script>
<script type="text/javascript">
    $(function(){
        //按鈕單擊時執行
        $("#testAjax").click(function(){
              
              //Ajax呼叫處理
            $.ajax({
               type: "POST",
               url: "test.php",
               data: "name=garfield&age=18",
               success: function(data){
                        $("#myDiv").html('<h2>'+data+'</h2>');
                  }
            });
            
         });
    });
</script>    
</head>
    <body>
        <div id="myDiv"><h2>通過 AJAX 改變文字</h2></div>
        <button id="testAjax" type="button">Ajax改變內容</button>
    </body>
</html>

##注意:關於onload和ready
####1. DOM ready

  • 用jQ的人很多人都是這麼開始寫指令碼的:
$(function(){
// do something
});

其實這個就是jq ready()的簡寫,他等價於:

$(document).ready(function(){
//do something
})

//或者下面這個方法,jQuer的預設引數是:“document”;

$().ready(function(){
//do something
})

這個就是jq ready()的方法就是Dom Ready,他的作用或者意義就是:在DOM載入完成後就可以可以對DOM進行操作。

文件載入的順序:域名解析–>載入HTML–>載入JavaScript和CSS–>載入圖片等非文字媒體檔案。

####2、DOM load

  • 文件載入的順序:域名解析–>載入HTML–>載入JavaScript和CSS–>載入圖片等非文字媒體檔案。

DOM load在載入圖片等非文字媒體檔案之後,表示在document文件載入完成後才可以對DOM進行操作,document文件包括了載入圖片等非文字媒體檔案。

如需要等該圖片載入完成,才可設定圖片的屬性或樣式等。

在原生JavaScript中使用onload事件。

  • window load:
window.onload = function() {  
    ...  
}  
  • 圖片load:
document.getElementsByTagName("img")[0].onload = function() {  
    ...  
}