Ajax

1.Ajax概述

1.Ajax:
Asynchronous JavaScript and XML(異步的JavaScript和XML)

Ajax是一種用于創(chuàng)建快速動(dòng)態(tài)網(wǎng)頁(yè)的技術(shù)。
通過(guò)在后臺(tái)與服務(wù)器進(jìn)行少量數(shù)據(jù)交換,Ajax可以使網(wǎng)頁(yè)實(shí)現(xiàn)異步更新。這意味著可以在不重新加載整個(gè)網(wǎng)頁(yè)的情況下,對(duì)網(wǎng)頁(yè)的某部分進(jìn)行更新。
傳統(tǒng)的網(wǎng)頁(yè)(不使用 AJAX)如果需要更新內(nèi)容,必需重載整個(gè)網(wǎng)頁(yè)面。

2.優(yōu)點(diǎn):
最大的優(yōu)點(diǎn)是在不重新加載整個(gè)頁(yè)面的情況下,可以與服務(wù)器交換數(shù)據(jù)并更新部分網(wǎng)頁(yè)內(nèi)容。
3.使用:
Ajax 不需要任何瀏覽器插件,只需要用戶在允許JavaScript的瀏覽器上執(zhí)行。

2.Ajax工作原理

Ajax工作原理

Ajax的原理簡(jiǎn)單來(lái)說(shuō)通過(guò)XmlHttpRequest對(duì)象來(lái)向服務(wù)器發(fā)異步請(qǐng)求,從服務(wù)器獲得數(shù)據(jù),然后用javascript來(lái)操作DOM而更新頁(yè)面。這其中最關(guān)鍵的一步就是從服務(wù)器獲得請(qǐng)求數(shù)據(jù)。

XMLHttpRequest是Ajax的核心機(jī)制

3.XMLHttpRequest

1.創(chuàng)建XMLHttpRequest 對(duì)象
由于瀏覽器的不同,創(chuàng)建XMLHttpRequest的方式也不同
可以這樣來(lái)判斷

var xmlhttp;
if (window.XMLHttpRequest)
{
    //  IE7+, Firefox, Chrome, Opera, Safari 瀏覽器執(zhí)行代碼
    xmlhttp=new XMLHttpRequest();
}
else
{
    // IE6, IE5 瀏覽器執(zhí)行代碼
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}

2.XMLHttpRequest 的屬性

  • responseText
    從服務(wù)器進(jìn)程返回?cái)?shù)據(jù)的字符串形式。

  • responseXML
    來(lái)自服務(wù)器的響應(yīng)是 XML,而且需要作為 XML 對(duì)象進(jìn)行解析

  • onreadystatechange
    請(qǐng)求發(fā)送到服務(wù)器,需要執(zhí)行響應(yīng)任務(wù)
    當(dāng)readyState發(fā)生改變時(shí)就會(huì)觸發(fā)onreadystatechange事件

  • readyState
    存有XMLHttpRequest的狀態(tài)。從0-4發(fā)生變化
    0:請(qǐng)求未初始化
    1:服務(wù)器連接已建立
    2:請(qǐng)求已接收
    3:請(qǐng)求處理
    4:請(qǐng)求已完成,且響應(yīng)已就緒

  • status
    從服務(wù)器返回的數(shù)字代碼
    eg:
    200: "OK"
    404: 未找到頁(yè)面

3.XMLHttpRequest的方法

  • open(method,url,async)
    規(guī)定請(qǐng)求的類型、url以及是否異步處理請(qǐng)求。
    method:請(qǐng)求的類型;get,post
    url:文件在服務(wù)器上的位置
    async:true(異步)或 false(同步)

  • send(string)
    將請(qǐng)求發(fā)送到服務(wù)器。
    string:僅用于 POST 請(qǐng)求

一個(gè)例子說(shuō)明上述屬性及方法

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script>
function loadXMLDoc()
{
//創(chuàng)建XMLHttpRequest對(duì)象
    var xmlhttp;
    if (window.XMLHttpRequest)
    {
        //  IE7+, Firefox, Chrome, Opera, Safari 瀏覽器執(zhí)行代碼
        xmlhttp=new XMLHttpRequest();
    }
    else
    {
        // IE6, IE5 瀏覽器執(zhí)行代碼
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
//onreadystatechange事件
    xmlhttp.onreadystatechange=function()
    {
//觸發(fā)onreadystatechange事件的因素判斷
  //readyState的XMLHttpRequest狀態(tài)為4(請(qǐng)求已完成,且響應(yīng)已就緒),并且status(服務(wù)器)返回200:OK;觸發(fā)事件
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
//從服務(wù)器進(jìn)程返回?cái)?shù)據(jù)的字符串形式。將值返回到id=myDiv的地方
            document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
        }
    }
//規(guī)定請(qǐng)求的類型、url以及是否異步處理請(qǐng)求。
    xmlhttp.open("GET","/try/ajax/ajax_info.txt",true);
//將請(qǐng)求發(fā)送給服務(wù)器
    xmlhttp.send();
}
</script>
</head>
<body>

<div id="myDiv"><h2>使用 AJAX 修改該文本內(nèi)容</h2></div>
<button type="button" onclick="loadXMLDoc()">修改內(nèi)容</button>

</body>
</html>

4.jquery中的Ajax

$.ajax

  • url
    發(fā)送請(qǐng)求的地址,默認(rèn)為當(dāng)前地址

  • type
    請(qǐng)求方式(get,post),默認(rèn)為get

  • data
    向服務(wù)器發(fā)送的數(shù)據(jù),要求類型是String或者Object類型

  • dataType
    數(shù)據(jù)類型(text,json,script,xml,html……)

  • success
    要求為Function類型的參數(shù),請(qǐng)求成功后調(diào)用的回調(diào)函數(shù),有兩個(gè)參數(shù)。
    (1)由服務(wù)器返回,并根據(jù)dataType參數(shù)進(jìn)行處理后的數(shù)據(jù)。
    (2)描述狀態(tài)的字符串。

 function(data, textStatus){
            //data可能是xmlDoc、jsonObj、html、text等等
            this;  //調(diào)用本次ajax請(qǐng)求時(shí)傳遞的options參數(shù)
         }
  • error
    要求為Function類型的參數(shù),請(qǐng)求失敗時(shí)被調(diào)用的函數(shù)。該函數(shù)有3個(gè)參數(shù),即XMLHttpRequest對(duì)象、錯(cuò)誤信息、捕獲的錯(cuò)誤對(duì)象(可選)。ajax事件函數(shù)如下
function(XMLHttpRequest, textStatus, errorThrown){
          //通常情況下textStatus和errorThrown只有其中一個(gè)包含信息
          this;   //調(diào)用本次ajax請(qǐng)求時(shí)傳遞的options參數(shù)
       }

目前我用到的只有這些,后面會(huì)更新

$(function(){
    $('#send').click(function(){
         $.ajax({
             type: "GET",
             url: "test.json",
             data: {username:$("#username").val(), content:$("#content").val()},
             dataType: "json",
             success: function(data){
                         $('#resText').empty();   //清空resText里面的所有內(nèi)容
                         var html = ''; 
                         $.each(data, function(commentIndex, comment){
                               html += '<div class="comment"><h6>' + comment['username']
                                         + ':</h6><p class="para"' + comment['content']
                                         + '</p></div>';
                         });
                         $('#resText').html(html);
                      }
         });
    });
});
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容