AJAX大合集

1.get請求

    var name = document.getElementById('username').value;
    //轉(zhuǎn)碼
    name = encodeURIComponent(name);
    //創(chuàng)建ajax對象
    var XHR = new XMLHttpRequest();
    
    XHR.open('get','text.php?name=' + name);

    XHR.onreadystatechange = function () {
        if (XHR.readyState == 4 && XHR.status == 200) {
            //do something
        }  
    };

    XHR.send();
state和status的區(qū)別

來個形象的比方沸伏,你體重多少公斤,屬于status,但說你體重屬于偏瘦、正常還是偏胖颠锉,那就是state.

2.POST 請求

1秕豫、必須通過send()發(fā)送 數(shù)據(jù)
2馏颂、必須設(shè)置setRequestHeader('Content-Type','application/x-www-form-urlencoded');將傳遞的值的參數(shù)轉(zhuǎn)成XML格式
3纳猪、post提交可以直接提交中文
4、post請求中的字符也會和URL中的&右莱、=字符相混淆蚜锨,所以建議也要使用encodeURIComponent()編碼

var name = document.getElementById('username').value;
    //轉(zhuǎn)碼
    name = encodeURIComponent(name);
    //創(chuàng)建ajax對象
    var XHR = new XMLHttpRequest();
    
    XHR.open('post','text.php?');

    XHR.onreadystatechange = function () {
        if (XHR.readyState == 4 && XHR.status == 200) {
            //do something
        }  
    };
    XHR.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    XHR.send('name='+name);
readyState
    0 初始狀態(tài)   xhr對象剛創(chuàng)建完
    1 連接       連接到服務(wù)器
    2 發(fā)送請求   剛剛send完
    3 接收完成   響應(yīng)頭接收完成
    4 接收完成   響應(yīng)體接收完成

3.POST和GET的區(qū)別

(1)最直觀的區(qū)別就是GET把參數(shù)包含在URL中,POST通過request body傳遞參數(shù)慢蜓。
(2)GET在瀏覽器回退時是無害的亚再,而POST會再次提交請求。
(3)GET請求會被瀏覽器主動cache晨抡,而POST不會氛悬,除非手動設(shè)置。耘柱。
(4)字?jǐn)?shù)限制:當(dāng)發(fā)送數(shù)據(jù)時如捅,GET 方法向 URL 添加數(shù)據(jù);URL 的長度是受限制的(URL 的最大長度是 2048 個字符)调煎。POST的傳輸字?jǐn)?shù)無限制镜遣。
(5)對參數(shù)的數(shù)據(jù)類型,GET只接受ASCII字符士袄,而POST沒有限制悲关。
(6)GET適用于數(shù)據(jù)的查詢和獲取,POST適用于數(shù)據(jù)的增加刪除和修改娄柳。
99%的人都理解錯了HTTP中GET與POST的區(qū)別

4.AJAX緩存

瀏覽器第一次訪問服務(wù)器的時候寓辱,需要從服務(wù)器加載很多的靜態(tài)資源(CSS、JS赤拒、Image)秫筏,并將這些資源文件緩存在瀏覽器中诱鞠,當(dāng)再次訪問頁面的時候,如果有相同的資源文件就直接到緩存中去加載跳昼,這樣就會降低服務(wù)器的負(fù)載和帶寬般甲,加快用戶訪問肋乍。
但是這樣也會出現(xiàn)bug鹅颊,比如獲取驗證碼,比如獲取服務(wù)器動態(tài)數(shù)據(jù)墓造,這個時候就要避免使用瀏覽器中的緩存

  • 方法一:在URL地址中添加隨機(jī)數(shù)堪伍,這樣使得URL是唯一的。
  • 方法二:設(shè)置header頭觅闽,禁止瀏覽器緩存該文件
header("Cache-Control:no-cache");
header("Pragma:no-cache");
header("Expires:-1");

5.PHP生成JSON數(shù)據(jù)

1帝雇、json_encode():將PHP數(shù)據(jù)轉(zhuǎn)成json格式
2、json_decode():將JSON格式轉(zhuǎn)成PHP數(shù)據(jù)格式

5.1將索引數(shù)組轉(zhuǎn)成JSON格式蛉拙、并逆轉(zhuǎn)換

索引數(shù)組轉(zhuǎn)成JSON格式還是數(shù)組的格式尸闸,逆轉(zhuǎn)換用數(shù)組的位置做下標(biāo)

5.2將關(guān)聯(lián)數(shù)組轉(zhuǎn)成JSON格式并逆轉(zhuǎn)換


關(guān)聯(lián)數(shù)組轉(zhuǎn)成JSON格式還是字面量對象的格式,逆轉(zhuǎn)換用數(shù)組的鍵做下標(biāo)

5.3既有關(guān)聯(lián)數(shù)組孕锄,也有索引數(shù)組


只要有一個元素是關(guān)聯(lián)數(shù)組的形式吮廉,就轉(zhuǎn)換成鍵值對的形式(字面量對象),沒有鍵的元素用元素的位置做鍵畸肆。

5.4二維數(shù)組轉(zhuǎn)換成JSON格式

5.5轉(zhuǎn)換對象

6.FormData

FormData是表單數(shù)據(jù)對象宦芦,可以實現(xiàn)快速收集表單信息,HTML5以后才支持轴脐。
使用FormData對象post傳遞數(shù)據(jù)不需要設(shè)置setRequestHeader()

PHP頁面

<?php
var_dump($_POST);

HTML頁面

<script type="text/javascript">
 window.onload=function(){
    document.getElementById('btn').onclick=function(){
        var frm=document.getElementById('frm');
        var fd=new FormData(frm);   //收集frm表單的數(shù)據(jù),文本數(shù)據(jù)和二進(jìn)制數(shù)據(jù)
        var req=new XMLHttpRequest();
        req.open('post','./5-demo.php');
        req.onreadystatechange=function(){
            if(req.readyState==4 && req.status==200){
                console.log(req.responseText);
            }
        }
        req.send(fd);   //發(fā)送FormData對象
    }
 }
    
 </script>
 <form action="" id="frm">
    用戶名:<input type="text" name="username" id=""><br>
    密碼:<input type="password" name="pwd" id=""> <br>
    <input type="button" value="用戶登錄" id='btn'>
 </form>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末调卑,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子大咱,更是在濱河造成了極大的恐慌恬涧,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碴巾,死亡現(xiàn)場離奇詭異气破,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)餐抢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門现使,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人旷痕,你說我怎么就攤上這事碳锈。” “怎么了欺抗?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵售碳,是天一觀的道長。 經(jīng)常有香客問我,道長贸人,這世上最難降的妖魔是什么间景? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮艺智,結(jié)果婚禮上倘要,老公的妹妹穿的比我還像新娘。我一直安慰自己十拣,他們只是感情好封拧,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著夭问,像睡著了一般泽西。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上缰趋,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天捧杉,我揣著相機(jī)與錄音,去河邊找鬼秘血。 笑死味抖,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的直撤。 我是一名探鬼主播非竿,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼谋竖!你這毒婦竟也來了红柱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤蓖乘,失蹤者是張志新(化名)和其女友劉穎锤悄,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嘉抒,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡零聚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了些侍。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片隶症。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖岗宣,靈堂內(nèi)的尸體忽然破棺而出蚂会,到底是詐尸還是另有隱情,我是刑警寧澤耗式,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布胁住,位于F島的核電站趁猴,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏彪见。R本人自食惡果不足惜儡司,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望余指。 院中可真熱鬧捕犬,春花似錦、人聲如沸浪规。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽笋婿。三九已至,卻和暖如春顿颅,著一層夾襖步出監(jiān)牢的瞬間缸濒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工粱腻, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留庇配,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓绍些,卻偏偏與公主長得像捞慌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子柬批,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理啸澡,服務(wù)發(fā)現(xiàn),斷路器氮帐,智...
    卡卡羅2017閱讀 134,601評論 18 139
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫嗅虏、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,033評論 4 62
  • 謀篇之“起承轉(zhuǎn)合” 起:顧名思義上沐,就是全詩的起句皮服,古人十分重視,稱之為“鳳頭”参咙。 “起”的方式有很多龄广,有明起、暗起...
    南風(fēng)窗A閱讀 839評論 4 7
  • 記:出生在1997年蕴侧,比多數(shù)人的出生更意外择同。是罪惡,但在愚昧的眼中是慈悲戈盈。 一直覺得自己是生在地下的怪物奠衔,一出生腦...
    陳周閱讀 244評論 0 0
  • 雖日日不得閑 卻也不見忙出來什么成績 回農(nóng)村的日期推了又推 前兩日也是去過了的 日子簡單隨意 先前總以為自己落...
    彈吉他的懶喵閱讀 192評論 9 1