<em id="09ttv"></em>
    <sup id="09ttv"><pre id="09ttv"></pre></sup>
    <dd id="09ttv"></dd>

        • 原生js的ajax請求

          2018-5-29    周周

          傳統(tǒng)方法的缺點(diǎn):

                傳統(tǒng)的web交互是用戶觸發(fā)一個(gè)http請求服務(wù)器,然后服務(wù)器收到之后,在做出響應(yīng)到用戶,并且返回一個(gè)新的頁面,,每當(dāng)服務(wù)器處理客戶端提交的請求時(shí),客戶都只能空閑等待,并且哪怕只是一次很小的交互、只需從服務(wù)器端得到很簡單的一個(gè)數(shù)據(jù),都要返回一個(gè)完整的HTML頁,而用戶每次都要浪費(fèi)時(shí)間和帶寬去重新讀取整個(gè)頁面。這個(gè)做法浪費(fèi)了許多帶寬,由于每次應(yīng)用的交互都需要向服務(wù)器發(fā)送請求,應(yīng)用的響應(yīng)時(shí)間就依賴于服務(wù)器的響應(yīng)時(shí)間。這導(dǎo)致了用戶界面的響應(yīng)比本地應(yīng)用慢得多。

          什么是ajax

                 ajax的出現(xiàn),剛好解決了傳統(tǒng)方法的缺陷。AJAX 是一種用于創(chuàng)建快速動態(tài)網(wǎng)頁的技術(shù)。通過在后臺與服務(wù)器進(jìn)行少量數(shù)據(jù)交換,AJAX 可以使網(wǎng)頁實(shí)現(xiàn)異步更新。這意味著可以在不重新加載整個(gè)網(wǎng)頁的情況下,對網(wǎng)頁的某部分進(jìn)行更新。

          XMLHttpRequest 對象

                 XMLHttpRequest對象是ajax的基礎(chǔ),XMLHttpRequest 用于在后臺與服務(wù)器交換數(shù)據(jù)。這意味著可以在不重新加載整個(gè)網(wǎng)頁的情況下,對網(wǎng)頁的某部分進(jìn)行更新。目前所有瀏覽器都支持XMLHttpRequest

          方法
          描述
          abort()
          停止當(dāng)前請求
          getAllResponseHeaders() 
           把HTTP請求的所有響應(yīng)首部作為鍵/值對返回
          getResponseHeader("header")
          返回指定首部的串值
          open("method","URL",[asyncFlag],["userName"],["password"])
          建立對服務(wù)器的調(diào)用。method參數(shù)可以是GET、POST或PUT。url參數(shù)可以是相對URL或絕對URL。這個(gè)方法還包括3個(gè)可選的參數(shù),是否異步,用戶名,密碼
          send(content)
          向服務(wù)器發(fā)送請求
          setRequestHeader("header", "value") 
          把指定首部設(shè)置為所提供的值。在設(shè)置任何首部之前必須先調(diào)用open()。設(shè)置header并和請求一起發(fā)送 ('post'方法一定要 )
          五步使用法:

                 1.創(chuàng)建XMLHTTPRequest對象
                 2.使用open方法設(shè)置和服務(wù)器的交互信息
                 3.設(shè)置發(fā)送的數(shù)據(jù),開始和服務(wù)器端交互
                 4.注冊事件
                 5.更新界面

          下面給大家列出get請求和post請求的例子

          get請求:      

                 //步驟一:創(chuàng)建異步對象
                 var ajax = new XMLHttpRequest();
                 //步驟二:設(shè)置請求的url參數(shù),參數(shù)一是請求的類型,參數(shù)二是請求的url,可以帶參數(shù),動態(tài)的傳遞參數(shù)starName到服務(wù)端
                 ajax.open('get','getStar.php?starName='+name);
                 //步驟三:發(fā)送請求
                  ajax.send();
                 //步驟四:注冊事件 onreadystatechange 狀態(tài)改變就會調(diào)用
                  ajax.onreadystatechange = function () {
                 if (ajax.readyState==4 &&ajax.status==200) {
                 //步驟五 如果能夠進(jìn)到這個(gè)判斷 說明 數(shù)據(jù) 完美的回來了,并且請求的頁面是存在的
                 console.log(xml.responseText);//輸入相應(yīng)的內(nèi)容
                   }
                  } 

          post請求:

                 //創(chuàng)建異步對象  
                 var xhr = new XMLHttpRequest();
                 //設(shè)置請求的類型及url
                 //post請求一定要添加請求頭才行不然會報(bào)錯(cuò)
                 xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
                 xhr.open('post', '02.post.php' );
                 //發(fā)送請求
                 xhr.send('name=fox&age=18');
                 xhr.onreadystatechange = function () {
                 // 這步為判斷服務(wù)器是否正確響應(yīng)
                 if (xhr.readyState == 4 && xhr.status == 200) {
                        console.log(xhr.responseText);
                       }
                  };    

          為了方便使用,我們可以把他封裝進(jìn)方法里面,要用的時(shí)候,直接調(diào)用就好了

                 function ajax_method(url,data,method,success) {
                 // 異步對象
                 var ajax = new XMLHttpRequest();

                // get 跟post  需要分別寫不同的代碼
                if (method=='get') {
                    // get請求
                    if (data) {
                        // 如果有值
                        url+='?';
                        url+=data;
                    }else{

                   }      

                 // 設(shè)置 方法 以及 url
                      ajax.open(method,url);

                     // send即可
                     ajax.send();
                  }else{
                       // post請求
                       // post請求 url 是不需要改變
                       ajax.open(method,url);

                      // 需要設(shè)置請求報(bào)文
                     ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded");

                     // 判斷data send發(fā)送數(shù)據(jù)
                    if (data) {
                      // 如果有值 從send發(fā)送
                          ajax.send(data);
                    }else{
                         // 木有值 直接發(fā)送即可
                        ajax.send();
                      }
                   }     

                 // 注冊事件
                 ajax.onreadystatechange = function () {
                 // 在事件中 獲取數(shù)據(jù) 并修改界面顯示
                      if (ajax.readyState==4&&ajax.status==200) {
                          // console.log(ajax.responseText);

                          // 將 數(shù)據(jù) 讓 外面可以使用
                         // return ajax.responseText;

                         // 當(dāng) onreadystatechange 調(diào)用時(shí) 說明 數(shù)據(jù)回來了
                        // ajax.responseText;

                        // 如果說 外面可以傳入一個(gè) function 作為參數(shù) success
                        success(ajax.responseText);
                       }
                   }
                }

          日歷

          鏈接

          個(gè)人資料

          存檔

          久久精品国产99国产电影网| 久久99精品国产麻豆不卡| 久久天天躁狠狠躁夜夜avapp| 国内精品久久久久影院亚洲| 亚洲国产欧洲综合997久久| av无码久久久久久不卡网站| 国产福利电影一区二区三区久久久久成人精品综合| 青草影院天堂男人久久| 久久久精品视频免费观看| 国产69精品久久久久APP下载 | 久久综合久久久| 久久亚洲天堂| 午夜精品久久久久久毛片| 伊人久久免费视频| 久久精品一区二区三区AV| www性久久久com| 久久AV无码精品人妻糸列| 久久综合九色综合欧美狠狠| 久久久亚洲裙底偷窥综合| 91精品国产高清久久久久久国产嫩草 | 伊人色综合九久久天天蜜桃| 精品人妻久久久久久888| 久久精品国产只有精品66| 久久精品国产亚洲AV电影| 一本大道久久东京热无码AV| 久久青草国产手机看片福利盒子| 国产精品美女久久福利网站| 久久精品国产99久久久香蕉| AV无码久久久久不卡网站下载| 欧美日韩精品久久久免费观看| 久久99精品国产麻豆不卡| 精品无码久久久久久尤物| 久久精品国产2020| 久久婷婷色香五月综合激情| 久久久久无码国产精品不卡| 伊人久久大香线蕉精品| 天天爽天天爽天天片a久久网| MM131亚洲国产美女久久| 高清免费久久午夜精品| 久久久久久亚洲AV无码专区 | 久久久久亚洲精品无码蜜桃|