ajax原理


1.什么是ajax

  Ajax(四個單詞的縮寫,Asynchronous JavaScript and XML)是一種網友交互的開發技術

  可以在頁面不刷新的情況下向服務器發送HTTP請求,並使用JavaScript處理返回的結果

  發送Ajax的初衷是為了用戶的表單進行數據驗證,因為在網絡匱乏的年代發送一個請求的速度特別慢,有了Ajax之后可以大大提高表單的提交效率

 

2.Ajax的用途

  Ajax技術在現代網頁中使用的非常廣泛,比如最常見的百度和淘寶 的相關關鍵字提醒,

  注冊頁面檢測用戶是否已經存在,瀑布流效果,頁面懶加載效果都是通過Ajax實現的。

 

3.Ajax的特點

  Ajax可以實現頁面的局部刷新,相對於頁面的整體刷新Ajax數據交互的速度更快,用戶等待的時間也更短,用戶體驗也相對較好

  不僅如此Ajax還能夠提高頁面的加載速度,就是常說的懶加載效果

  對於一些用戶現在瀏覽不到 的頁面選擇不加載等到頁面滾動到目標位置之后,然后通過Ajax請求服務器的數據   來顯示內容

 

4.ajax的使用

  原生的方式請求包括四步

  (1)。創建Ajax請求對象

  (2)。綁定事件

  (3)。初始化

  (4)  。發送請求

    (GET)

    var  x = new XMLHttpRequest();

    var  x.readystatechanges =  function(){

      if(onreadyState == 4 && status == 200){

        console.log(x.responseText);

      } 

      x.open('GET', './server.php?id=2', true);

      x.send(); 

    }  

    (POST)

      xmlhttp.setRequestHeader('content-type','application/x-www-form-urlencoded');

      發送參數  send('a=100&b=www')

    (jquery TP5.0發送ajax)    

      $.ajax({
        url:"{:url('Order/recy_del')}",
        type:'POST',
        data:{'id':id},
        success:function (res) {
          if(res.code==1){
            layer.msg(res.msg,{icon:1,time:1500},function(){
            window.location.reload()
            });
          }else{
            layer.msg(res.msg,{icon:2,time:1500},function(){
            window.location.reload();
            });
          }
        },
       })

    (axios  TP5.0發送ajax)

      axios.post('/wechat.php/order/xiandan',{'ajaxData':ajaxData,'sid':sid,'mid':mid,'did':did,'price':price}).then(
        function(res){
          if(res.data){
            window.location.href = '/wechat.php/order/dingdanxiangqing?id='+res.data;
          }else{
            layer.open({skin:'msg', content: '提交訂單失敗!', time: 1.5});
          }
        }
      ).catch()

  

AJAX 可以發送兩種類型請求, GET 和 POST , get 傳參是將參數綴到 url 的后邊, post 傳參需要把參數放置在 send 方法中.

------------------------------------------------------------------------------------------------------------------------------------------  

// readyState 是 ajax 對象中的一個屬性, 用來表示ajax對象的狀態, 總共是 5 個值, 0-4
/**
0 代表未初始化
1 正在向服務端發送請求
2 已經接收完全部響應數據
3 表示正在解析數據
4 解析已經完成
*/

// status 是服務器響應的狀態碼
/**
常見的狀態碼有
200 OK
302 跳轉
304 Not Modified
403 Forbidden
404 Not Found
500 內部錯誤
*/

5.  其他的方式

  除了原生方式可以發送 AJAX 請求之外, 我們在項目中一般會使用第三方的工具包來發送,

  比如 jquery axios(安可C哦斯), 特別是 axios 是專門用來發送請求用的, 現在很多的單頁APP在進行服務器交互的時候 都會使用 axios.

 

6.數據的返回

   在進行數據返回的時候,服務器一般的返回數據是json格式的  JavaScript需要對json格式的數據進行解析,解析的方式json。parse,

    如果是jQuery的話可以在發送的時候指定dataType為json,那么返回的數據就直接是json的對象

 

7.Ajax的缺點

    當然 AJAX 也有一些缺點, 最大的缺點就是不能跨域, A 網站無法向 B 網站發送 AJAX 請求(就是所說的同源策略),

    解決這個問題我們可以使用 jsonp 技術. 例如jquery 中的 $.getJSON, 向服務器發送請求的時候,

    將(回調的)函數名傳遞給服務器, 服務器在返回結果的時候, 返回的是一個函數的調用的字符串,

    函數執行的參數就是數據

 

    客戶端代碼

    $.getJSON('http://b.com/server.php?callback=?',function(data){

      console.log(data)
    })

    服務器代碼

    // b.com 服務器
    // server.php
    $str = json_encode(['name'=>'zhangsan','age'=>20]);

    echo $_GET['callback']."($str)";

 

 


免責聲明!

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



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