主頁 > 企業開發 > ajax

ajax

2020-10-01 03:30:27 企業開發


**今天,我就帶你來了解一下ajax吧!**

首先我們得明白什么是ajax?那到底什么才是ajax呢?
     
   AJAX = “Asynchronous Javascript And XML”(==異步 JavaScript 和 XML==)直譯出來就是異步的JavaScript和資料傳輸技術,國內常翻譯為**==“阿賈克斯”==**是指一種無需重新加載整個網頁的情況下,能夠更新部分網頁的技術,直白的說,ajax就是js通過一個網址去加載資料,用戶是看不見的,可以通過瀏覽器控制臺中的網路查看,
   
上面說到,xml,我們就結合json來給你介紹~~~
==xml(可擴展標記語言)、json(輕量級資料格式)都是字串的格式,都用于資料傳輸==
兩者之間有什么區別呢?
**xml:**
      優點:
      1、傳輸的資料種類特別豐富
      2、傳輸的資料量非常大
      缺點:
      決議起來比較麻煩
    【注】用于大型門戶網站,今日頭條、騰訊新聞、網易新聞,
     **json:**
       優點:
       1、決議起來非常方便
       2、適合輕量級的資料
       缺點:
       1、種類比較少
       【注】基本上90%以上應用用的都是json格式字串傳輸,
同時說到異步,有的小伙伴就懵逼了,心想異步是啥,有什么作用呢?
了解異步之前,我們首先看看javas中的同步是什么吧!
==同步==阻塞,當前程式必須等前面的程式執行完畢以后,才能運行
舉個例子:就好比我們做飯,飯做好了,才去做菜,
在JavaScript中,異步與同步是相反的存在,所以說異步就是什么呢?
==異步==非阻塞,當前程式的執行和前面程式是否執行完畢沒有關系,
舉個例子:做飯的同時,我可以洗菜,切菜,
**總結著來說**:同步必須按照順序一步一步執行,而異步就是不按順序不管前面執不執行或者執行完不完畢我都執行!
ajax有什么好處?有什么缺點呢?

**AJAX的優點:**
1)頁面無重繪更新資料:AJAX最大優點就是能在不重繪整個頁面的前提下與服務器通信維護資料;
2)異步與服務器通信:AJAX使用異步方式與服務器通信,不需要打斷用戶的操作,具有更加迅速的回應能力;
3)前端和后端負載平衡:AJAX可以把以前一些服務端負擔的作業轉嫁到客戶端,減輕服務器和帶寬的負擔,節約空間和寬帶租用成本;
4)基于標準被廣泛支持:AJAX基于標準化的并被廣泛支持的技術,不需要下載瀏覽器插件;
5)界面與應用分離:Ajax使WEB中的資料與呈現分離,有利于分工合作,提高效率,
**AJAX的缺點:**
1)AJAX干掉了Back和History功能:即對瀏覽器機制的破壞,在動態更新頁面的情況下,用戶無法回到前一個頁面狀態;
2)AJAX有安全問題:AJAX技術給用戶帶來很好的用戶體驗的同時也帶來了新的安全威脅,Ajax技術就如同對企業資料建立了一個直接通道;
3)對搜索引擎支持較弱:對搜索引擎優化不太友好;
4)破壞程式的例外處理機制:像Ajax.dll,Ajaxpro.dll這些Ajax框架是會破壞程式的例外機制;
5)AJAX不能很好支持移動設備:一些手持設備(如手機、PDA等)不能很好的支持Ajax,
**了解這些之后,我們接下來看看ajax是怎樣操作的,具體步驟有哪些呢**?
總結為如下四步:
 1.宣告一個ajax物件
 2.輸入請求資訊(三個引數)
  第一個引數:請求的方式
   get       post
   第二個引數:請求的url
 第三個引數:是否異步
 true(異步)  false(同步)
 3.發送
 4.等待資料回應

<!DOCTYPE html><html lang="en">   
 <head>       
 <meta charset="UTF-8">        
 <meta name="viewport" content="width=device-width, initial-scale=1.0">                 <title>Document</title>        
 <script>            
    window.onload = function(){                
       var oBtn = document.getElementById('btn1');                
       oBtn.onclick = function(){ 
       //1、宣告一個ajax物件                 
          var xhr = new XMLHttpRequest();
                //2、輸入請求的資訊      
             /*   
                  第一個引數:請求的方式           
                     get post  
                  第二個引數:請求的url                       
                  第三個引數:是否異步                            
                  true (異步)  false (同步)                  
                    */                    
                xhr.open("get", "1.txt", true);
               //3、發送                    
                 xhr.send();
                //4、等待資料回應             
             xhr.onreadystatechange = function(){
                 if(xhr.readyState == 4){
                 alert(xhr.responseText);             
                    }  
                   }  
                  }  
                 }
        </script>
            </head>
                <body>
                        <button id = 'btn1'>下載資料</button> 
               </body>
            </html>

 



有一種瀏覽器兼容的寫法:
<!DOCTYPE html><html lang="en">    
<head>        
<meta charset="UTF-8">       
<meta name="viewport" content="width=device-width, initial-scale=1.0">        <title>Document</title>        
<script>            
       window.onload = function(){ 
        var oBtn = document.getElementById('btn1');                
        oBtn.onclick = function(){ 
         //1、宣告一個ajax物件   
         /*             
         XMLHttpRequest 在低版本的IE瀏覽器下并不兼容               
           */                              
          var xhr = null; 
          if(window.XMLHttpRequest){
           xhr = new XMLHttpRequest(); 
           }else{ 
            xhr = new ActiveXObject("Microsoft.XMLHTTP");               
            //2、輸入請求的資訊                    
            /*                       
             第一個引數:請求的方式                           
              get post                       
            第二個引數:請求的url                        
            第三個引數:是否異步     
            true (異步)  false (同步)  
              */                   
               xhr.open("get", "1.txt", true);
                    //3、發送   
                  xhr.send();
                //4、等待資料回應
                xhr.onreadystatechange = function(){
                   if(xhr.readyState == 4){
                     alert(xhr.responseText); 
                       }  
                    }    
                  }  
                }
        </script>  
          </head>   
           <body>   
                <button id = 'btn1'>下載資料</button>   
            </body>
          </html>

 




**明白了嘛?明白了接下來我們在了解一個很有用又有趣的東西:try-throw-catch**
 格式:               
             try{                       
               我們要去執行的代碼;               
               throw new Error("錯誤文本");
                }catch(error){ 補救代碼;  }            
 執行:                   
 1、先去執行try中的代碼                   
 2、如果try中的代碼執行正常,catch中的代碼就不執行了                  
  3、如果try中的代碼執行例外(包括throw手動拋出例外),執行catch中的代碼進行補救,                   
【注】同時,error是try中例外資訊,
【注】最大用處的,用于代碼除錯,


<!DOCTYPE html><html lang="en">    
<head>        
<meta charset="UTF-8"> 
<meta name="viewport" content="width=device-width, initial-scale=1.0">        <title>Document</title>  
<script>        
     try{  
      alert("認識成果");  
      alert("追到手"); 
      alert("娶成果"); 
       throw new Error("追到手代碼執行正常");
        }catch(error){ 
       alert("我是補救代碼:" + error);
         //我是補救代碼:ReferenceError: num is not defined  
          }
       alert("我是最后的代碼")
        </script> 
       </head>   
        <body>           
        </body>
        </html>

 

好玩吧!
上面ajax中出現的get和post不陌生吧!是不是似曾相識,在那見過吧~~~那呢,對了!表單!那接下來我們就看看ajax中的get與post有什么區別, get引數通過url傳遞,post放在請求體(request body)中;   
get請求在url傳遞的引數有長度限制,而post沒有;   
get比post更不安全,因為引數直接顯示在url地址中,所以不能傳遞敏感資料;    
get請求瀏覽器會主動快取,而post不會;
get請求引數會保存在瀏覽歷史記錄,而post請求不會;  
get和post本質上都是tcp連接,  
<!DOCTYPE html><html lang="en">
<head> 
 <meta charset="UTF-8"> 
 <meta name="viewport" content="width=device-width, initial-scale=1.0">        <title>Document</title> 
 <script>           
        window.onload = function(){  
         var aBtns = document.getElementsByTagName("button");                aBtns[0].onclick = function(){  
          var xhr = null; 
           try{ 
            xhr = new XMLHttpRequest();  
             }catch(error){ 
         xhr = new ActiveXObject("Microsoft.XMLHTTP")    
                    }
            var str = "username=tian&age=18&password=123abc";
            xhr.open("get", "code14/1.get.php?" + str, true);
            xhr.send();
            xhr.onreadystatechange = function(){
             if(xhr.readyState == 4){
              if(xhr.status == 200){              
              alert(xhr.responseText);  
              }else{ 
               alert("Error:" + xhr.status); 
                }
              }
           }
        }   
      aBtns[1].onclick = function(){    
        var xhr = null; 
        try{ 
        xhr = new XMLHttpRequest(); 
        }catch(error){
           xhr = new ActiveXObject("Microsoft.XMLHTTP")                    }
          var str = "username=tian&age=18&password=123abc";
         xhr.open("post", "code14/1.post.php", true);
  //設定提交資料格式                    xhr.setRequestHeader("content-type", "application/x-www-form-urlencoded");
//post提交的資料是通過send方法進行傳參的,注意post提交的資料不加xhr.send(str);
            xhr.onreadystatechange = function(){
               if(xhr.readyState == 4){ 
                  if(xhr.status == 200){                                
                  alert(xhr.responseText);        
               }else{    
                   alert("Error:" + xhr.status)
                          }      
                      }       
                   }    
                 }   
              }        
         </script>    
         </head>    
         <body>        
         <button>GET請求</button>        
         <button>POST請求</button>    
         </body>
        </html>

 


**readystatechange事件**
xhr.readyState 值發生變化的時候,會觸發上述的這個事件
0  (初始化)沒有呼叫open方法的時候
1  (載入)已經呼叫send方法,發送請求
2  (載入完成)send方法已經發送完畢,接受到了所有的回應
3  (決議)正在決議回應內容
4  (完成)內容決議完成,可以在客戶端呼叫了
 responseText  回應文本,以字串的形式回傳我們請求的資料,
 
**常見的status(狀態碼):**
200:請求成功
301:網頁被重定向到其他url
304:檔案未被修改,使用快取資源
404:找不到此網頁(指定的資源)
500:服務器內部錯誤
......
當然想知道更多狀態可以去自己找!下面提供一個可跳轉的超鏈接頁面:
[更多狀態碼](https://www.runoob.com/http/http-status-codes.html) **查詢字串形式:**
search(查詢字串):?name1=value1&name2=value2
querystring(查詢字串): name1=value1&name2=value2
<!DOCTYPE html><html lang="en"> 
<head> 
 <meta charset="UTF-8"> 
 <meta name="viewport" content="width=device-width, initial-scale=1.0">        <title>Document</title>
 <script>    
      //傳入物件,拼接成querystring
        function querystring(obj){ 
        var str = ''; 
         for(var attr in obj){
          str += attr + "=" + obj[attr] + "&";
            } 
         return str.substring(0, str.length - 1); 
          }
            //username=tian&age=20&sex=男
           alert(querystring({
             username: "tian",
             age: 20,
             sex: "男" 
        }))       
         </script>    
         </head>    
         <body>           
         </body>
        </html>

 



**最后封裝一個ajax函式,記得收藏哦!**
<!DOCTYPE html><html lang="en">    
<head>        
<meta charset="UTF-8">        
<meta name="viewport" content="width=device-width, initial-scale=1.0">        <title>Document</title>       
 <script> 
  /*  
  type 代表 請求方式 
  url  代表 請求url路徑  
  data 代表 發送資料   
   */           
  function $ajax(type, url, objData){              
    var xhr = null;  
      try{ 
       xhr = new XMLHttpRequest(); 
        }catch(error){  
        xhr = new ActiveXObject("Microsoft.XMLHTTP") 
                }   
        if(type == "get" && objData){ 
            url += "?" + querystring(objData);
                   }
                xhr.open(type, url, true);
                if(type == "get"){ 
                 xhr.send();  
                  }else{ 
                 //設定提交資料格式  
      xhr.setRequestHeader("content-type", "application/x-www-form-urlencoded"); 
           objData ? xhr.send(querystring(objData)) : xhr.send(); 
           }   
           xhr.onreadystatechange = function(){            
           if(xhr.readyState == 4){ 
                 if(xhr.status == 200){            
                 alert(xhr.responseText);
                  }else{  
                   alert("Error:" + xhr.status);  
                       }  
                    }    
                 }        
            }            
         function querystring(obj){ 
          var str = ''; 
           for(var attr in obj){
           str += attr + "=" + obj[attr] + "&";
             } 
             return str.substring(0, str.length - 1);
               }
            window.onload = function(){
             var aBtns = document.getElementsByTagName("button");
             aBtns[0].onclick = function(){ 
                   $ajax("get", "code14/1.get.php", {    
                   username: "小明",
                   age: 40,
                   password: "123abc"  }); 
                   }
                aBtns[1].onclick = function(){ 
                $ajax("post", "code14/1.post.php", {               
                  username: "小花",
                  age: 18,
                  password: "123abc"  });
                    } 
                 }
        </script>  
          </head>    
          <body>        
          <button>GET請求</button>        
          <button>POST請求</button>    
          </body>
         </html>

 


==記得一定要用控制臺網路查看請求資料形態哦!==
最后,希望我的文章能給你帶來微妙的幫助,一起奧利給!!!當然如果你對前端開發的學習有興趣,可以在B站上找尋碼農雨飛的免費前端學習視頻,代碼免費送,http://www.bilibili.com/video/av77505416.當然也可以留言評論加關注與我暢所欲談共同漫步于知識的海洋,,,,
```                        

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/143973.html

標籤:JavaScript

上一篇:插入js,參考js,js在頁面中的位置

下一篇:# ES6學習筆記(四):教你理解ES6的新增語法

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 使用Django Rest framework搭建Blog

    在前面的Blog例子中我們使用的是GraphQL, 雖然GraphQL的使用處于上升趨勢,但是Rest API還是使用的更廣泛一些. 所以還是決定回到傳統的rest api framework上來, Django rest framework的官網上給了一個很好用的QuickStart, 我參考Qu ......

    uj5u.com 2023-04-20 08:17:54 more
  • 記錄-new Date() 我忍你很久了!

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 大家平時在開發的時候有沒被new Date()折磨過?就是它的諸多怪異的設定讓你每每用的時候,都可能不小心踩坑。造成程式意外出錯,卻一下子找不到問題出處,那叫一個煩透了…… 下面,我就列舉它的“四宗罪”及應用思考 可惡的四宗罪 1. Sa ......

    uj5u.com 2023-04-20 08:17:47 more
  • 使用Vue.js實作文字跑馬燈效果

    實作文字跑馬燈效果,首先用到 substring()截取 和 setInterval計時器 clearInterval()清除計時器 效果如下: 實作代碼如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta ......

    uj5u.com 2023-04-20 08:12:31 more
  • JavaScript 運算子

    JavaScript 運算子/運算子 在 JavaScript 中,有一些運算子可以使代碼更簡潔、易讀和高效。以下是一些常見的運算子: 1、可選鏈運算子(optional chaining operator) ?.是可選鏈運算子(optional chaining operator)。?. 可選鏈操 ......

    uj5u.com 2023-04-20 08:02:25 more
  • CSS—相對單位rem

    一、概述 rem是一個相對長度單位,它的單位長度取決于根標簽html的字體尺寸。rem即root em的意思,中文翻譯為根em。瀏覽器的文本尺寸一般默認為16px,即默認情況下: 1rem = 16px rem布局原理:根據CSS媒體查詢功能,更改根標簽的字體尺寸,實作rem單位隨螢屏尺寸的變化,如 ......

    uj5u.com 2023-04-20 08:02:21 more
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 08:01:50 more
  • 如何在 vue3 中使用 jsx/tsx?

    我們都知道,通常情況下我們使用 vue 大多都是用的 SFC(Signle File Component)單檔案組件模式,即一個組件就是一個檔案,但其實 Vue 也是支持使用 JSX 來撰寫組件的。這里不討論 SFC 和 JSX 的好壞,這個仁者見仁智者見智。本篇文章旨在帶領大家快速了解和使用 Vu ......

    uj5u.com 2023-04-20 08:01:37 more
  • 【Vue2.x原始碼系列06】計算屬性computed原理

    本章目標:計算屬性是如何實作的?計算屬性快取原理以及洋蔥模型的應用?在初始化Vue實體時,我們會給每個計算屬性都創建一個對應watcher,我們稱之為計算屬性watcher ......

    uj5u.com 2023-04-20 08:01:31 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:01:10 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:00:32 more