22 WEB:AJAX和Json

今日內(nèi)容

1. AJAX:
2. JSON

AJAX:

1. 概念: ASynchronous JavaScript And XML  異步的JavaScript 和 XML
    1. 異步和同步:客戶端和服務(wù)器端相互通信的基礎(chǔ)上
        * 客戶端必須等待服務(wù)器端的響應(yīng)腥泥。在等待的期間客戶端不能做其他操作。
        * 客戶端不需要等待服務(wù)器端的響應(yīng)。在服務(wù)器處理請求的過程中腋舌,客戶端可以進行其他的操作据块。

        Ajax 是一種在無需重新加載整個網(wǎng)頁的情況下腿椎,能夠更新部分網(wǎng)頁的技術(shù)骑丸。 [1] 
        通過在后臺與服務(wù)器進行少量數(shù)據(jù)交換霎冯,Ajax 可以使網(wǎng)頁實現(xiàn)異步更新发魄。這意味著可以在不重新加載整個網(wǎng)頁的情況下盹牧,對網(wǎng)頁的某部分進行更新。
        傳統(tǒng)的網(wǎng)頁(不使用 Ajax)如果需要更新內(nèi)容励幼,必須重載整個網(wǎng)頁頁面汰寓。

        提升用戶的體驗

2. 實現(xiàn)方式:
    1. 原生的JS實現(xiàn)方式(了解)
                 //1.創(chuàng)建核心對象
                var xmlhttp;
                if (window.XMLHttpRequest)
                {// code for IE7+, Firefox, Chrome, Opera, Safari
                    xmlhttp=new XMLHttpRequest();
                }
                else
                {// code for IE6, IE5
                    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
                }
    
                //2. 建立連接
                /*
                    參數(shù):
                        1. 請求方式:GET、POST
                            * get方式苹粟,請求參數(shù)在URL后邊拼接有滑。send方法為空參
                            * post方式,請求參數(shù)在send方法中定義
                        2. 請求的URL:
                        3. 同步或異步請求:true(異步)或 false(同步)
    
                 */
                xmlhttp.open("GET","ajaxServlet?username=tom",true);
    
                //3.發(fā)送請求
                xmlhttp.send();
    
                //4.接受并處理來自服務(wù)器的響應(yīng)結(jié)果
                //獲取方式 :xmlhttp.responseText
                //什么時候獲惹断鳌毛好?當服務(wù)器響應(yīng)成功后再獲取
    
                //當xmlhttp對象的就緒狀態(tài)改變時望艺,觸發(fā)事件onreadystatechange。
                xmlhttp.onreadystatechange=function()
                {
                    //判斷readyState就緒狀態(tài)是否為4肌访,判斷status響應(yīng)狀態(tài)碼是否為200
                    if (xmlhttp.readyState==4 && xmlhttp.status==200)
                    {
                       //獲取服務(wù)器的響應(yīng)結(jié)果
                        var responseText = xmlhttp.responseText;
                        alert(responseText);
                    }
                }
    2. JQeury實現(xiàn)方式
        1. $.ajax()
            * 語法:$.ajax({鍵值對});
             //使用$.ajax()發(fā)送異步請求
                $.ajax({
                    url:"ajaxServlet1111" , // 請求路徑
                    type:"POST" , //請求方式
                    //data: "username=jack&age=23",//請求參數(shù)
                    data:{"username":"jack","age":23},
                    success:function (data) {
                        alert(data);
                    },//響應(yīng)成功后的回調(diào)函數(shù)
                    error:function () {
                        alert("出錯啦...")
                    },//表示如果請求響應(yīng)出現(xiàn)錯誤找默,會執(zhí)行的回調(diào)函數(shù)
    
                    dataType:"text"http://設(shè)置接受到的響應(yīng)數(shù)據(jù)的格式
                });
        2. $.get():發(fā)送get請求
            * 語法:$.get(url, [data], [callback], [type])
                * 參數(shù):
                    * url:請求路徑
                    * data:請求參數(shù)
                    * callback:回調(diào)函數(shù)
                    * type:響應(yīng)結(jié)果的類型

        3. $.post():發(fā)送post請求
            * 語法:$.post(url, [data], [callback], [type])
                * 參數(shù):
                    * url:請求路徑
                    * data:請求參數(shù)
                    * callback:回調(diào)函數(shù)
                    * type:響應(yīng)結(jié)果的類型

JSON:

1. 概念: JavaScript Object Notation       JavaScript對象表示法
    Person p = new Person();
    p.setName("張三");
    p.setAge(23);
    p.setGender("男");

    var p = {"name":"張三","age":23,"gender":"男"};

    * json現(xiàn)在多用于存儲和交換文本信息的語法
    * 進行數(shù)據(jù)的傳輸
    * JSON 比 XML 更小、更快吼驶,更易解析惩激。

2. 語法:
    1. 基本規(guī)則
        * 數(shù)據(jù)在名稱/值對中:json數(shù)據(jù)是由鍵值對構(gòu)成的
            * 鍵用引號(單雙都行)引起來,也可以不使用引號
            * 值得取值類型:
                1. 數(shù)字(整數(shù)或浮點數(shù))
                2. 字符串(在雙引號中)
                3. 邏輯值(true 或 false)
                4. 數(shù)組(在方括號中)    {"persons":[{},{}]}
                5. 對象(在花括號中) {"address":{"province":"陜西"....}}
                6. null
        * 數(shù)據(jù)由逗號分隔:多個鍵值對由逗號分隔
        * 花括號保存對象:使用{}定義json 格式
        * 方括號保存數(shù)組:[]
    2. 獲取數(shù)據(jù):
        1. json對象.鍵名
        2. json對象["鍵名"]
        3. 數(shù)組對象[索引]
        4. 遍歷
                 //1.定義基本格式
                var person = {"name": "張三", age: 23, 'gender': true};
        
                var ps = [{"name": "張三", "age": 23, "gender": true},
                    {"name": "李四", "age": 24, "gender": true},
                    {"name": "王五", "age": 25, "gender": false}];
        
        
        
        
                //獲取person對象中所有的鍵和值
                //for in 循環(huán)
               /* for(var key in person){
                    //這樣的方式獲取不行旨剥。因為相當于  person."name"
                    //alert(key + ":" + person.key);
                    alert(key+":"+person[key]);
                }*/
        
               //獲取ps中的所有值
                for (var i = 0; i < ps.length; i++) {
                    var p = ps[i];
                    for(var key in p){
                        alert(key+":"+p[key]);
                    }
                }


3. JSON數(shù)據(jù)和Java對象的相互轉(zhuǎn)換

    * JSON解析器:
        * 常見的解析器:Jsonlib咧欣,Gson,fastjson轨帜,jackson
    
    1. JSON轉(zhuǎn)為Java對象
        1. 導入jackson的相關(guān)jar包
        2. 創(chuàng)建Jackson核心對象 ObjectMapper
        3. 調(diào)用ObjectMapper的相關(guān)方法進行轉(zhuǎn)換
            1. readValue(json字符串數(shù)據(jù),Class)
                readValue(json,person.class)
    2. Java對象轉(zhuǎn)換JSON
        1. 使用步驟:
            1. 導入jackson的相關(guān)jar包
            2. 創(chuàng)建Jackson核心對象 ObjectMapper
            3. 調(diào)用ObjectMapper的相關(guān)方法進行轉(zhuǎn)換
                1. 轉(zhuǎn)換方法:
                    * writeValue(參數(shù)1魄咕,obj):
                        參數(shù)1:
                            File:將obj對象轉(zhuǎn)換為JSON字符串,并保存到指定的文件中
                            Writer:將obj對象轉(zhuǎn)換為JSON字符串蚌父,并將json數(shù)據(jù)填充到字符輸出流中
                            OutputStream:將obj對象轉(zhuǎn)換為JSON字符串哮兰,并將json數(shù)據(jù)填充到字節(jié)輸出流中
                    * writeValueAsString(obj):將對象轉(zhuǎn)為json字符串

                2. 注解:
                    1. @JsonIgnore:排除屬性。
                    2. @JsonFormat:屬性值得格式化
                        * @JsonFormat(pattern = "yyyy-MM-dd")

                3. 復雜java對象轉(zhuǎn)換
                    1. List:數(shù)組
                    2. Map:對象格式一致

案例:

* 校驗用戶名是否存在
    1. 服務(wù)器響應(yīng)的數(shù)據(jù)苟弛,在客戶端使用時喝滞,要想當做json數(shù)據(jù)格式使用。有兩種解決方案:
        1. $.get(type):將最后一個參數(shù)type指定為"json"
        2. 在服務(wù)器端設(shè)置MIME類型
            response.setContentType("application/json;charset=utf-8");
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末膏秫,一起剝皮案震驚了整個濱河市右遭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌缤削,老刑警劉巖窘哈,帶你破解...
    沈念sama閱讀 212,599評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異亭敢,居然都是意外死亡滚婉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評論 3 385
  • 文/潘曉璐 我一進店門帅刀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來让腹,“玉大人,你說我怎么就攤上這事扣溺『希” “怎么了?”我有些...
    開封第一講書人閱讀 158,084評論 0 348
  • 文/不壞的土叔 我叫張陵锥余,是天一觀的道長腹纳。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么只估? 我笑而不...
    開封第一講書人閱讀 56,708評論 1 284
  • 正文 為了忘掉前任志群,我火速辦了婚禮,結(jié)果婚禮上蛔钙,老公的妹妹穿的比我還像新娘锌云。我一直安慰自己,他們只是感情好吁脱,可當我...
    茶點故事閱讀 65,813評論 6 386
  • 文/花漫 我一把揭開白布桑涎。 她就那樣靜靜地躺著,像睡著了一般兼贡。 火紅的嫁衣襯著肌膚如雪攻冷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,021評論 1 291
  • 那天遍希,我揣著相機與錄音等曼,去河邊找鬼。 笑死凿蒜,一個胖子當著我的面吹牛禁谦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播废封,決...
    沈念sama閱讀 39,120評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼州泊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了漂洋?” 一聲冷哼從身側(cè)響起遥皂,我...
    開封第一講書人閱讀 37,866評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎刽漂,沒想到半個月后演训,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,308評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡爽冕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,633評論 2 327
  • 正文 我和宋清朗相戀三年仇祭,在試婚紗的時候發(fā)現(xiàn)自己被綠了披蕉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颈畸。...
    茶點故事閱讀 38,768評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖没讲,靈堂內(nèi)的尸體忽然破棺而出眯娱,到底是詐尸還是另有隱情,我是刑警寧澤爬凑,帶...
    沈念sama閱讀 34,461評論 4 333
  • 正文 年R本政府宣布徙缴,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏于样。R本人自食惡果不足惜疏叨,卻給世界環(huán)境...
    茶點故事閱讀 40,094評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望穿剖。 院中可真熱鬧蚤蔓,春花似錦、人聲如沸糊余。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贬芥。三九已至吐辙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蘸劈,已是汗流浹背昏苏。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留威沫,地道東北人捷雕。 一個月前我還...
    沈念sama閱讀 46,571評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像壹甥,于是被迫代替她去往敵國和親救巷。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,666評論 2 350

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