ajax知識介紹

來源:互聯網
上載者:User

標籤:

AJAX編程

即 Asynchronous [e‘s??kr?n?s] Javascript And XML, AJAX 不是一門的新的語言,而是對現有技術的綜合利用。 本質是在HTTP協議的基礎上以非同步方式與伺服器進行通訊。

1.1、 非同步

指某段程式執行時不會阻塞其它程式執行,其表現形式為程式的執行順序不依賴程式本身的書寫順序,相反則為同步。

其優勢在於不阻塞程式的執行,從而提升整體執行效率。

XMLHttpRequest可以以非同步方式的處理常式。

2.2、 XMLHttpRequest

瀏覽器內建對象,用於在後台與伺服器通訊(交換資料) , 由此我們便可實現對網頁的部分更新,而不是重新整理整個頁面。

```javascript /js 內建的 http 請求對象 XMLHttpRequest/

/*1.怎麼使用 這個內建對象*/var xhr = new XMLHttpRequest;/*2.怎麼樣去組請求*//*請求的行*/xhr.open(‘post‘,‘01.php‘);/*要求標頭*///get  沒有必要設定//post 必須設定 Content-Type: application/x-www-form-urlencodedxhr.setRequestHeader(‘Content-Type‘,‘application/x-www-form-urlencoded‘);/*請內容*//*3.發送請求*/xhr.send("name=xjj&age=10");

```

2.2.1、請求

HTTP請求3個組成部分與XMLHttpRequest方法的對應關係

1、請求行

xhr.open(‘post‘,‘01.php‘);

2、要求標頭

xhr.setRequestHeader(‘Content-Type‘,‘application/x-www-form-urlencoded‘);get請求可以不設定

3、請求主體

xhr.send("name=xjj&age=10");get可以傳空

注意書寫順序

2.2.2、響應

HTTP響應是由服務端發出的,作為用戶端更應關心的是響應的結果。

HTTP響應3個組成部分與XMLHttpRequest方法或屬性的對應關係。

由於伺服器做出響應需要時間(比如網速慢等原因),所以我們需要監聽伺服器響應的狀態,然後才能進行處理。

javascript if(xhr.readyState == 4 && xhr.status == 200){ console.log(‘ok‘); console.log(xhr.responseText); /*把內容渲染在頁面當中*/ document.querySelector(‘#result‘).innerHTML = xhr.responseText; }readyState 0:請求未初始化(還沒有調用 open())。 1:請求已經建立,但是還沒有發送(還沒有調用 send())。 2:請求已發送,正在處理中(通常現在可以從響應中擷取內容標題)。 3:請求在處理中;通常響應中已有部分資料可用了,但是伺服器還沒有完成響應的產生。 4:響應已完成;您可以擷取並使用伺服器的響應了。

onreadystatechange是Javascript的事件的一種,其意義在於監聽XMLHttpRequest的狀態

1、擷取狀態行(包括狀態代碼&狀態資訊)

xhr.status 狀態代碼xhr.statusText 狀態代碼資訊

2、擷取回應標頭

xhr.getResponseHeader(‘Content-Type‘);xhr.getAllResponseHeaders();

3、響應主體

xhr.responseTextxhr.responseXML

我們需要檢測並判斷回應標頭的MIME類型後確定使用request.responseText或者request.responseXML

2.3.3、API詳解
xhr.open() 發起請求,可以是get、post方式xhr.setRequestHeader() 佈建要求頭xhr.send() 發送請求主體get方式使用xhr.send(null)xhr.onreadystatechange = function () {} 監聽響應狀態xhr.status表示響應碼,如200xhr.statusText表示響應資訊,如OKxhr.getAllResponseHeaders() 擷取全部回應標頭資訊xhr.getResponseHeader(‘key‘) 擷取指定頭資訊xhr.responseText、xhr.responseXML都表示響應主體

註:GET和POST請求方式的差異(面試題)

1、GET沒有請求主體,使用xhr.send(null)

2、GET可以通過在請求URL上添加請求參數

3、POST可以通過xhr.send(‘name=itcast&age=10‘)

4、POST需要設定

5、GET效率更好(應用多)

6、GET大小限制約4K,POST則沒有限制

問題?如何擷取複雜資料呢?

2.3、 XML

1、必須有一個根項目 2、不可有空格、不可以數字或.開頭、大小寫敏感 3、不可交叉嵌套 4、屬性雙引號(瀏覽器自動修正成雙引號了) 5、特殊符號要使用實體 6、注釋和HTML一樣 雖然可以描述和傳輸複雜資料,但是其解析過於複雜並且體積較大,所以實現開發已經很少使用了。

xml <?xml version="1.0" encoding="UTF-8"?> <root> <arrayList> <array> <src>images/banner.jpg</src> <newPirce>12.00</newPirce> <oldPrice>30.00</oldPrice> </array> <array> <src>images/banner.jpg</src> <newPirce>12.00</newPirce> <oldPrice>30.00</oldPrice> </array> </arrayList> </root>```php <?php header(‘Content-Type:text/xml;charset=utf-8‘); /以xml格式傳輸資料的時候要求響應內容格式是 text/xml/

/*file_get_contents 擷取檔案內容*/$xml = file_get_contents(‘01.xml‘);/*輸出xml內容*/echo $xml;

?> javascript var xhr = new XMLHttpRequest; xhr.open(‘get‘,‘01.php‘); xhr.send(null); xhr.onreadystatechange = function(){ if(xhr.status == 200 && xhr.readyState == 4){ /擷取到XML格式內容 放回的是DOM對象 document/ var xml = xhr.responseXML; /通過選著器可以擷取到xml的資料/ console.log(xml.querySelectorAll(‘array‘)[0].querySelector(‘src‘).innerHTML); } } ```

2.4、 JSON

即 JavaScript Object Notation,另一種輕量級的文本資料交換格式,獨立於語言。

1、資料在成對的名稱和數值中 2、資料由逗號分隔(最後一個健/值對不能帶逗號) 3、花括弧儲存對象方括弧儲存數組 4、使用雙引號

JSON [ {"src":"images/detail01.jpg","oldPrice":"10.12","newPrice":"130.00"}, {"src":"images/detail02.jpg","oldPrice":"1.00","newPrice":"11.00"}, {"src":"images/detail03.jpg","oldPrice":"100.00","newPrice":"1000.00"} ]

JSON資料在不同語言進行傳輸時,類型為字串,不同的語言各自也都對應有解析方法,需要解析完成後才能讀取

1、PHP解析方法 jsonencode()、jsondecode() ```PHP <?php header(‘Content-Type:text/html;charset=utf-8‘); /以json格式傳輸資料的時候要求響應內容格式是 application/json/ /注意也可以不設定 但是這遵循的一個規範/

/*file_get_contents 擷取檔案內容*/$json = file_get_contents(‘01.json‘);/*輸出json內容*/echo $json;echo ‘<br><br>‘;$array = array(    array(‘src‘=>‘images/detail01.jpg‘,‘newPrice‘=>‘12.00‘,‘oldPrice‘=>‘455.00‘),    array(‘src‘=>‘images/detail02.jpg‘,‘newPrice‘=>‘65.00‘,‘oldPrice‘=>‘878.00‘),    array( ‘src‘=>‘images/detail01.jpg‘,‘newPrice‘=>‘100.00‘,‘oldPrice‘=>‘1000.00‘));/*將php數組轉化成json字元*/$json_array = json_encode($array);echo $json_array;echo ‘<br><br>‘;/*將json字元轉化成php數組*/$array_json = json_decode($json_array);echo $array_json;echo ‘<br><br>‘;

?>**1、Javascript 解析方法** JSON對象 JSON.parse()、JSON.stringify(); JSON相容處理json2.js 總結:JSON體積小、解析方便且高效,在實際開發成為首選。javascript var xhr = new XMLHttpRequest; xhr.open(‘get‘,‘01.php‘); xhr.send(null); xhr.onreadystatechange = function(){ if(xhr.status == 200 && xhr.readyState == 4){ /擷取僅僅是字串/ var text = xhr.responseText;

        /*需要把字串轉化成JSON對象*/        var json_obj = JSON.parse(text);        console.log(json_obj);        /*我們也可以把JSON對象轉化成字串*/        var json_str = JSON.stringify(json_obj);        console.log(json_str);    }}

```

2.5、 相容性

關於IE的相容方面,瞭解即可。 ```javascript function XHR() { var xhr; try { xhr = new XMLHttpRequest(); } /如果 try內的程式運行錯誤 拋出異常 捕捉異常 上面程式當中啟動並執行錯誤/ catch(e) { /在不同的IE版本下初始 ActiveXObject 需要傳入的標識/ var IEXHRVers =["Msxml3.XMLHTTP","Msxml2.XMLHTTP","Microsoft.XMLHTTP"];

        for (var i=0;i<IEXHRVers.length;i++) {            try {                xhr = new ActiveXObject(IEXHRVers[i]);            }            catch(e) {                /*如果出現錯誤的時候  停止當次的迴圈*/                continue;            }        }    }    return xhr;}

```

2.6、 封裝ajax工具函數

```javascript /** * ITCAST WEB * Created by zhousg on 2016/5/24. / / * 1. 請求的類型 type get post * 2. 請求地址 url * 3. 是非同步還是同步的 async false true * 4. 請求內容的格式 contentType * 5. 傳輸的資料 data json對象 * * 6.響應成功處理函數 success function * 7.響應失敗的處理函數 error function * * 這些都是動態參數 參數對象 options * */

/封裝一個函數/ window.$ = {}; /申明一個ajax的方法/ $.ajax = function(options){

if(!options || typeof options != ‘object‘){    return false;}/*請求的類型*/var type = options.type || ‘get‘;/*預設get*//*請求地址 */var url = options.url || location.pathname;/*當前的地址*//*是非同步還是同步的 */var async = (options.async === false)?false:true;/*預設非同步*//*請求內容的格式 */var contentType = options.contentType || "text/html";/*傳輸的資料 */var data = options.data || {};/*{name:‘‘,age:‘‘}*//*在提交的時候需要轉成 name=xjj 這種格式*/var dataStr = ‘‘/*資料字串*/for(var key in data){    dataStr += key+‘=‘+data[key]+‘&‘;}dataStr = dataStr && dataStr.slice(0,-1);/*ajax 編程*/var xhr = new XMLHttpRequest();/*請求行*//*(type==‘get‘?url+‘?‘+dataStr:url)判斷當前的請求類型*/xhr.open(type,(type==‘get‘?url+‘?‘+dataStr:url),async);/*要求標頭*/if(type == ‘post‘){    xhr.setRequestHeader(‘Content-Type‘,‘application/x-www-form-urlencoded‘);}/*請求主體*//*需要判斷請求類型*/xhr.send(type==‘get‘?null:dataStr);/*監聽響應狀態的改變  響應狀態*/xhr.onreadystatechange = function(){    /*請求響應完成並且成功*/    if(xhr.readyState == 4 && xhr.status == 200){        /*success*/        var data = ‘‘;        var contentType = xhr.getResponseHeader(‘Content-Type‘);        /*如果我們伺服器返回的是xml*/        if(contentType.indexOf(‘xml‘) > -1){            data = xhr.responseXML;        }        /*如果我們的伺服器返回的是json字串*/        else if(contentType.indexOf(‘json‘) > -1){            /*轉化json對象*/            data = JSON.parse(xhr.responseText);        }        /*否則的話他就是字串*/        else{            data = xhr.responseText;        }        /*回調 成功處理函數*/        options.success && options.success(data);    }    /*計時請求xhr.status不成功  他也需要的響應完成才認作是一個錯誤的請求*/    else if(xhr.readyState == 4){        /*error*/        options.error && options.error(‘you request fail !‘);    }}

} $.post = function(options){ options.type = ‘post‘; $.ajax(options); } $.get = function(options){ options.type = ‘get‘; $.ajax(options); }

```

2.7、 jquery的ajax
  • jQuery為我們提供了更強大的Ajax封裝
  • $.ajax({}) 可配置方式發起Ajax請求
  • $.get() 以GET方式發起Ajax請求
  • $.post() 以POST方式發起Ajax請求
  • $(‘form‘).serialize() 序列化表單(即格式化key=val&key=val)
  • url 介面地址
  • type 請求方式
  • timeout 請求逾時
  • dataType 伺服器返回格式
  • data 發送請求資料
  • beforeSend: function () {} 請求發起前調用
  • success 成功響應後調用
  • error 錯誤響應時調用
  • complete 響應完成時調用(包括成功和失敗)
  • jQuery Ajax介紹
  • http://www.w3school.com.cn/jquery/jqueryrefajax.asp

ajax知識介紹

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.