最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

js原生Ajax的封裝和原理詳解

 更新時(shí)間:2017年03月11日 10:22:07   作者:sjpqy  
這篇文章主要為大家詳細(xì)介紹了js原生Ajax的封裝和原理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

原理及概念

AJAX即“Asynchronous Javascript And XML”(異步JavaScript和XML),是一種用于創(chuàng)建快速動(dòng)態(tài)網(wǎng)頁(yè)的技術(shù)。

動(dòng)態(tài)網(wǎng)頁(yè):是指可以通過(guò)服務(wù)器語(yǔ)言結(jié)合數(shù)據(jù)庫(kù)隨時(shí)修改數(shù)據(jù)的網(wǎng)頁(yè)。

靜態(tài)網(wǎng)頁(yè),隨著html代碼的生成,頁(yè)面的內(nèi)容和顯示效果就基本上不會(huì)發(fā)生變化了——除非你修改頁(yè)面代碼。

AJAX = 異步 JavaScript和XML(標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言的子集)。

AJAX 是與服務(wù)器交換數(shù)據(jù)并更新部分網(wǎng)頁(yè)的藝術(shù),在不重新加載整個(gè)頁(yè)面的情況下。

Ajax的優(yōu)勢(shì)

AJAX 在瀏覽器與 Web 服務(wù)器之間使用異步數(shù)據(jù)傳輸(HTTP 請(qǐng)求),這樣就可使網(wǎng)頁(yè)從服務(wù)器請(qǐng)求少量的信息,而不是整個(gè)頁(yè)面。

AJAX 可使因特網(wǎng)應(yīng)用程序更小、更快,更友好。

AJAX 是一種獨(dú)立于 Web 服務(wù)器軟件的瀏覽器技術(shù)。

AJAX 基于下列 Web 標(biāo)準(zhǔn):

JavaScriptXMLHTMLCSS在 AJAX 中使用的 Web 標(biāo)準(zhǔn)已被良好定義,并被所有的主流瀏覽器支持。AJAX 應(yīng)用程序獨(dú)立于瀏覽器和平臺(tái)。

Web 應(yīng)用程序較桌面應(yīng)用程序有諸多優(yōu)勢(shì);它們能夠涉及廣大的用戶,它們更易安裝及維護(hù),也更易開發(fā)。

不過(guò),因特網(wǎng)應(yīng)用程序并不像傳統(tǒng)的桌面應(yīng)用程序那樣完善且友好。

通過(guò) AJAX,因特網(wǎng)應(yīng)用程序可以變得更完善,更友好。

Ajax的異步

異步:是相對(duì)于同步而言的,我們學(xué)過(guò)的定時(shí)器也是異步的一種,也就是其他程序不需要等待定時(shí)器的代碼全部執(zhí)行完畢以后才能執(zhí)行代碼。因?yàn)槎〞r(shí)器有可能是無(wú)限循環(huán)執(zhí)行代碼的,如果等待定時(shí)器執(zhí)行完畢那么其他的代碼將永遠(yuǎn)無(wú)法運(yùn)行。所以異步編程就是相對(duì)于其他代碼是獨(dú)立完成的。也就是上面所說(shuō)的ajax是獨(dú)立于瀏覽器平臺(tái)的。

Tip:事件也是異步執(zhí)行的,事件是發(fā)生某件事情后才會(huì)執(zhí)行代碼的。
同步:我們之前所寫的代碼除了定時(shí)器和事件大部分都是同步執(zhí)行的。也就是同一個(gè)代碼塊中都是從上到下執(zhí)行的。

Ajax的工作原理

Ajax 核心對(duì)象XMLHttpRequest
var _hr=new window.XMLHttpRequest();
通過(guò)該實(shí)例化的對(duì)象向服務(wù)器
發(fā)出請(qǐng)求,等待服務(wù)器響應(yīng)
服務(wù)器響應(yīng)完成后客戶端再處理
服務(wù)器端響應(yīng)的數(shù)據(jù)。
Ajax請(qǐng)求服務(wù)器的過(guò)程中有5個(gè)狀態(tài)
0:表示請(qǐng)求服務(wù)器之前
1:表示打開遠(yuǎn)程服務(wù)器鏈接對(duì)應(yīng)open方法
2:表示向服務(wù)器發(fā)送數(shù)據(jù)對(duì)應(yīng)send方法
3:表示服務(wù)器響應(yīng)過(guò)程中并未結(jié)束
4:表示服務(wù)器響應(yīng)完成

/**
 * 創(chuàng)建XMLHttpRequest對(duì)象
 * @param _method 請(qǐng)求方式: post||get
 * @param _url 遠(yuǎn)程服務(wù)器地址
 * @param _async 是否異步
 * @param _parameter 向服務(wù)器發(fā)送數(shù)據(jù)
 * @param _callBack 回調(diào)函數(shù)
 */
function parameterDeal(_parameter){
  var _sender="";
  if(_parameter instanceof Object){
    for(var k in _parameter){
      _sender+=k+"="+_parameter[k]+"&";
    }
    return _sender.replace(/\&$/g,"");
  }else{
    return _parameter;
  }
}
function createXMLHttpRequest(){
  try{
    return new window.XMLHttpRequest();
  }catch(e){
    try{
      return new ActiveXObject("MSXML2.XMLHTTP.6.0");
    }catch(e){
      try{
        return new ActiveXObject("MSXML2.XMLHTTP.3.0");
      }catch(e){
        try{
          return new ActiveXObject("MSXML2.XMLHTTP");
        }catch(e){
          try{
            return new ActiveXObject("Microsoft.XMLHTTP");
          }catch(e){
            throw new Error("該瀏覽器版本太低,已經(jīng)被大部分市場(chǎng)淘汰,請(qǐng)升級(jí)!!!");
            return;
          }
        }
      }
    }
  }
}
function ajaxRequest(_method,_url,_async,_parameter,_callBack){
  var _ajax=createXMLHttpRequest();
  if(_ajax){
    _ajax.onreadystatechange=function(){
      if(_ajax.readyState==4 && _ajax.status==200){
        _callBack(_ajax.responseText);
      }
    }
    _ajax.open(_method,_url,_async);
    _ajax.setRequestHeader("content-type","application/x-www-form-urlencoded;charset=utf-8");
    _ajax.send(parameterDeal(_parameter));
  }
}

這是封裝好了的原生Ajax,在使用的過(guò)程中,只需要新建一個(gè)js文件,將這段代碼放進(jìn)去,什么都不要改,在HTML頁(yè)面引入之后,調(diào)用 ajaxRequest()函數(shù),傳入你想要的參數(shù),就可以正常使用了。

此方法純屬個(gè)人封裝,有更精簡(jiǎn)方法的朋友歡迎與我分享!

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 結(jié)合ES6?編寫?JavaScript?設(shè)計(jì)模式中的結(jié)構(gòu)型模式

    結(jié)合ES6?編寫?JavaScript?設(shè)計(jì)模式中的結(jié)構(gòu)型模式

    這篇文章主要介紹了結(jié)合ES6編寫JavaScript?設(shè)計(jì)模式中的結(jié)構(gòu)型模式,設(shè)計(jì)模式是軟件設(shè)計(jì)中常見(jiàn)問(wèn)題的解決方案,這些模式很容易重復(fù)使用并且富有表現(xiàn)力
    2022-07-07
  • 原生js結(jié)合html5制作簡(jiǎn)易的雙色子游戲

    原生js結(jié)合html5制作簡(jiǎn)易的雙色子游戲

    這篇文章主要介紹了原生js結(jié)合html5制作簡(jiǎn)易的雙色子游戲的代碼,是個(gè)人學(xué)習(xí)練手用的,雖然寫的不太好,還是分享給大家,有需要的小伙伴可以參考下。
    2015-03-03
  • JS可斷點(diǎn)續(xù)傳文件上傳實(shí)現(xiàn)代碼解析

    JS可斷點(diǎn)續(xù)傳文件上傳實(shí)現(xiàn)代碼解析

    這篇文章主要介紹了JS可斷點(diǎn)續(xù)傳文件上傳實(shí)現(xiàn)代碼解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • js通過(guò)循環(huán)多張圖片實(shí)現(xiàn)動(dòng)畫效果

    js通過(guò)循環(huán)多張圖片實(shí)現(xiàn)動(dòng)畫效果

    這篇文章主要為大家詳細(xì)介紹了js通過(guò)循環(huán)多張圖片實(shí)現(xiàn)動(dòng)畫效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • JavaScript 浮點(diǎn)數(shù)精度問(wèn)題小結(jié)

    JavaScript 浮點(diǎn)數(shù)精度問(wèn)題小結(jié)

    浮點(diǎn)數(shù)精度問(wèn)題是指在計(jì)算機(jī)中使用二進(jìn)制表示浮點(diǎn)數(shù)時(shí),由于二進(jìn)制無(wú)法精確表示某些十進(jìn)制小數(shù),本文主要介紹了JavaScript 浮點(diǎn)數(shù)精度問(wèn)題,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-02-02
  • JS實(shí)現(xiàn)超炫網(wǎng)頁(yè)煙花動(dòng)畫效果的方法

    JS實(shí)現(xiàn)超炫網(wǎng)頁(yè)煙花動(dòng)畫效果的方法

    這篇文章主要介紹了JS實(shí)現(xiàn)超炫網(wǎng)頁(yè)煙花動(dòng)畫效果的方法,實(shí)例分析了javascript實(shí)現(xiàn)煙花動(dòng)畫效果的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • go.js的基本使用方法詳解【與vue,react同理】

    go.js的基本使用方法詳解【與vue,react同理】

    這篇文章主要介紹了go.js的基本使用方法,結(jié)合實(shí)例形式詳細(xì)分析了go.js基本功能、原理及vue中使用方法,需要的朋友可以參考下
    2023-06-06
  • 基于JS實(shí)現(xiàn)蜘蛛俠動(dòng)作游戲的示例代碼

    基于JS實(shí)現(xiàn)蜘蛛俠動(dòng)作游戲的示例代碼

    這篇文章主要介紹了如何利用JavaScript實(shí)現(xiàn)簡(jiǎn)單的蜘蛛俠動(dòng)作游戲,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)JavaScript游戲開發(fā)有一定的幫助,需要的可以參考一下
    2022-06-06
  • 詳細(xì)講解js實(shí)現(xiàn)電梯導(dǎo)航的實(shí)例

    詳細(xì)講解js實(shí)現(xiàn)電梯導(dǎo)航的實(shí)例

    對(duì)于某一個(gè)頁(yè)面內(nèi)容繁多,如果我們滾動(dòng)的時(shí)間較長(zhǎng),為了增加用戶體驗(yàn),我們需要實(shí)現(xiàn)點(diǎn)擊某一個(gè)按鈕,然后滾動(dòng)到對(duì)應(yīng)的區(qū)域,滾動(dòng)的時(shí)候,右側(cè)對(duì)應(yīng)的分類實(shí)現(xiàn)高亮,所以本文給大家詳細(xì)介紹講解了js實(shí)現(xiàn)電梯導(dǎo)航,需要的朋友可以參考下
    2023-10-10
  • Javascript跨域請(qǐng)求的4種解決方式

    Javascript跨域請(qǐng)求的4種解決方式

    如果所請(qǐng)求的域名跟這個(gè)域名不致,這種情況就是跨域,由于跨域存在漏洞,所以一般來(lái)說(shuō)正常的跨域請(qǐng)求方式是請(qǐng)求不到的,所以有了本文的出現(xiàn),感興趣的你可以參考下哈,希望可以幫助到你
    2013-03-03

最新評(píng)論

宕昌县| 闸北区| 兴宁市| 广东省| 高邮市| 上饶县| 县级市| 富阳市| 密云县| 江油市| 祁连县| 青海省| 剑河县| 雷山县| 方山县| 丰县| 留坝县| 巴楚县| 察隅县| 合阳县| 金坛市| 武胜县| 乐山市| 金坛市| 嘉黎县| 远安县| 微山县| 漳平市| 泉州市| 上虞市| 周宁县| 蒙阴县| 崇礼县| 清水县| 元氏县| 金沙县| 曲阜市| 新巴尔虎左旗| 慈溪市| 鸡泽县| 科技|