原生js的ajax請求

 

傳統方法的缺點:javascript

  傳統的web交互是用戶觸發一個http請求服務器,而後服務器收到以後,在作出響應到用戶,而且返回一個新的頁面,,每當服務器處理客戶端提交的請求時,客戶都只能空閒等待,而且哪怕只是一次很小的交互、只需從服務器端獲得很簡單的一個數據,都要返回一個完整的HTML頁,而用戶每次都要浪費時間和帶寬去從新讀取整個頁面。這個作法浪費了許多帶寬,因爲每次應用的交互都須要向服務器發送請求,應用的響應時間就依賴於服務器的響應時間。這致使了用戶界面的響應比本地應用慢得多。php

 

什麼是ajaxjava

  ajax的出現,恰好解決了傳統方法的缺陷。AJAX 是一種用於建立快速動態網頁的技術。經過在後臺與服務器進行少許數據交換,AJAX 可使網頁實現異步更新。這意味着能夠在不從新加載整個網頁的狀況下,對網頁的某部分進行更新。web

XMLHttpRequest 對象ajax

  XMLHttpRequest對象是ajax的基礎,XMLHttpRequest 用於在後臺與服務器交換數據。這意味着能夠在不從新加載整個網頁的狀況下,對網頁的某部分進行更新。目前全部瀏覽器都支持XMLHttpRequest瀏覽器

 

方    法 描    述
abort() 中止當前請求 
getAllResponseHeaders() 把HTTP請求的全部響應首部做爲鍵/值對返回
getResponseHeader("header") 返回指定首部的串值
open("method","URL",[asyncFlag],["userName"],["password"])  創建對服務器的調用。method參數能夠是GET、POST或PUT。url參數能夠是相對URL或絕對URL。這個方法還包括3個可選的參數,是否異步,用戶名,密碼
send(content) 向服務器發送請求
setRequestHeader("header", "value") 把指定首部設置爲所提供的值。在設置任何首部以前必須先調用open()。設置header並和請求一塊兒發送 ('post'方法必定要 )


五步使用法:
服務器

  1.建立XMLHTTPRequest對象app

  2.使用open方法設置和服務器的交互信息異步

  3.設置發送的數據,開始和服務器端交互async

  4.註冊事件

  5.更新界面

下面給你們列出get請求和post請求的例子

get請求:

//步驟一:建立異步對象
var ajax = new XMLHttpRequest();
//步驟二:設置請求的url參數,參數一是請求的類型,參數二是請求的url,能夠帶參數,動態的傳遞參數starName到服務端
ajax.open('get','getStar.php?starName='+name);
//步驟三:發送請求
ajax.send();
//步驟四:註冊事件 onreadystatechange 狀態改變就會調用
ajax.onreadystatechange = function () {
if (ajax.readyState==4 &&ajax.status==200) { //步驟五 若是可以進到這個判斷 說明 數據 完美的回來了,而且請求的頁面是存在的
  }    console.log(ajax.responseText);//輸入相應的內容
}

 post請求:

//建立異步對象  
var xhr = new XMLHttpRequest();
//設置請求的類型及url
//post請求必定要添加請求頭才行否則會報錯
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
 xhr.open('post', '02.post.php' );
//發送請求
xhr.send('name=fox&age=18');
xhr.onreadystatechange = function () {
    // 這步爲判斷服務器是否正確響應
  if (xhr.readyState == 4 && xhr.status == 200) {
    console.log(xhr.responseText);
  } 
};

爲了方便使用,咱們能夠把他封裝進方法裏面,要用的時候,直接調用就行了

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

    // get 跟post  須要分別寫不一樣的代碼
    if (method=='get') {
        // get請求
        if (data) {
            // 若是有值
            url+='?';
            url+=data;
        }else{

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

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

        // 須要設置請求報文
        ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded");

        // 判斷data send發送數據
        if (data) {
            // 若是有值 從send發送
            ajax.send(data);
        }else{
            // 木有值 直接發送便可
            ajax.send();
        }
    }

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

            // 將 數據 讓 外面可使用
            // return ajax.responseText;

            // 當 onreadystatechange 調用時 說明 數據回來了
            // ajax.responseText;

            // 若是說 外面能夠傳入一個 function 做爲參數 success
            success(ajax.responseText);
        }
    }

}
相關文章
相關標籤/搜索