前端--- AJAX與JSON

一、AJAX

  1. 概念:異步的JavaScript和XMl

    • ① 異步和同步:建立在客戶端和服務器通信的基礎

      • 同步:客戶端必須等待服務器端的響應。在等待的期間客戶端不能做其他操作。
    • 異步:客戶端不需要等待服務器端的響應。在服務器處理請求的過程中,客戶端可以進行其他的操作。

    異步與同步.png
  • ② 特點:
    • Ajax 是一種在無需重新加載整個網(wǎng)頁的情況下,能夠更新部分網(wǎng)頁的技術。 [1]
    • 通過在后臺與服務器進行少量數(shù)據(jù)交換,Ajax 可以使網(wǎng)頁實現(xiàn)異步更新。這意味著可以在不重新加載整個網(wǎng)頁的情況下,對網(wǎng)頁的某部分進行更新。
    • 傳統(tǒng)的網(wǎng)頁(不使用 Ajax)如果需要更新內容,必須重載整個網(wǎng)頁頁面。
  1. 實現(xiàn)方式:

    • ① 原生的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.接受并處理來自服務器的響應結果
      //獲取方式 :xmlhttp.responseText
      //什么時候獲???當服務器響應成功后再獲取
      
      //當xmlhttp對象的就緒狀態(tài)改變時,觸發(fā)事件onreadystatechange。
      xmlhttp.onreadystatechange=function()
      {
         //判斷readyState就緒狀態(tài)是否為4,判斷status響應狀態(tài)碼是否為200
         if (xmlhttp.readyState==4 && xmlhttp.status==200){
              //獲取服務器的響應結果
             var responseText = xmlhttp.responseText;
                  alert(responseText);
         }
      }
      
  • ② JQuery實現(xiàn)方式:

    • $.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);
           },//響應成功后的回調函數(shù)
        
           error:function () {
                   alert("出錯啦...")
           },//表示如果請求響應出現(xiàn)錯誤,會執(zhí)行的回調函數(shù)
           dataType:"text"http://設置接受到的響應數(shù)據(jù)的格式
      });
      
    • $.get()

      語法:$.get(url, [data], [callback], [type])
          * 參數(shù):
              * url:請求路徑
              * data:請求參數(shù)
              * callback:回調函數(shù)
              * type:響應結果的類型
      
    • $.post()

    •  語法:$.post(url, [data], [callback], [type])
         * 參數(shù):
             * url:請求路徑
             * data:請求參數(shù)
             * callback:回調函數(shù)
             * type:響應結果的類型
      

二、JSON

  1. JavaScript Object Notation JavaScript對象表示法

    • ① 概念:

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

      Person p = new Person();
      p.setName("張三");
      p.setAge(23);
      p.setGender("男");
      
    • ③ JSON中

    • var p = {"name":"張三","age":23,"gender":"男"};
      
  2. 語法:

    • ① 基本規(guī)則

      • 數(shù)據(jù)在名稱/值對中:json數(shù)據(jù)是由鍵值對構成的

        • 鍵用引號(單雙引)引起來,也可以不使用引號

        • 值的取值類型

          1. 數(shù)字(整數(shù)或浮點數(shù))
          2. 字符串(在雙引號中)
          3. 邏輯值(true 或 false)
          4. 數(shù)組(在方括號中)   {"persons":[{},{}]}
          5. 對象(在花括號中) {"address":{"province":"陜西"....}}
          6. null
          
      • 數(shù)據(jù)是由逗號分隔

      • 花括號保存對象

      • 方括號保存數(shù)組

  • ② 獲取數(shù)據(jù)

    • json對象.鍵名

    • json[“鍵名”]

    • 數(shù)組對象[索引]

    • 遍歷數(shù)據(jù):

      ////獲取person對象中所有的鍵和值
      var person = {"name": "張三", age: 23, 'gender': true};
      
      //for in 循環(huán)
      for(var key in person){
           //這樣的方式獲取不行。因為相當于  person."name"
           //alert(key + ":" + person.key);
           alert(key+":"+person[key]);
      }
      
      
      //遍歷數(shù)組對象
      var ps = [
        {"name": "張三", "age": 23, "gender": true},
       {"name": "李四", "age": 24, "gender": true},
       {"name": "王五", "age": 25, "gender": false}
      ];
      
      //獲取ps中的所有值
      for (var i = 0; i < ps.length; i++) {
           var p = ps[i];
           for(var key in p){
               alert(key+":"+p[key]);
           }
      }
      
  1. JSON數(shù)據(jù)和JAVA對象相互轉換

    • ① JSON解析器:
  • 常見解析器:Jsonlib,Gjson,fastjson,jackson

  • ② JSON轉為JAVA對象

    • 導入jackon相關jar包

    • 創(chuàng)建jackson核心對象 ObjectMapper

    • 使用ObjectMapper的相關方法進行轉換

      //第一個參數(shù):json字符串
      //第二個參數(shù):要轉換為的java對象
      objectMapper.readValues(json,class);
      
  • ③ JAVA對象轉為JSON

    • 導入jackon相關jar包

    • 創(chuàng)建jackson核心對象 ObjectMapper

      • //創(chuàng)建json 核心解析對象
        ObjectMapper objectMapper = new ObjectMapper();
        
      
      
    • 使用ObjectMapper的相關方法進行轉換

      • writeValueAsString方法:

        • //writeValueAsString(obj):將對象轉為json字符串
          String string = objectMapper.writeValueAsString(person);  
          
        
      
      • writeValue方法

        • //writeValue(參數(shù)1,obj):
             //參數(shù)1:
                 //File:將obj對象轉換為JSON字符串,并保存到指定的文件中
          objectMapper.writeValue(new File("/a.txt") ,person);
          
             //Writer:將obj對象轉換為JSON字符串,并將json數(shù)據(jù)填充到字符輸出流中
             //OutputStream:將obj對象轉換為JSON字符串,并將json數(shù)據(jù)填充到字節(jié)輸出流中
          
  1. 細節(jié):

    • ① 注解---->針對Date

    • 1. @JsonIgnore:排除屬性。
      2. @JsonFormat:屬性值得格式化
          @JsonFormat(pattern = "yyyy-MM-dd")
          private Date date;
      
    • ② 復雜的java對象轉換

      List集合:轉換為數(shù)組
      Map集合:對象格式一致
      
    • ③ 服務器響應的數(shù)據(jù),在客戶端使用時,要想當做json數(shù)據(jù)格式使用。有兩種解決方案:

    • 1. $.get(type):將最后一個參數(shù)type指定為"json"
      2. 在服務器端設置MIME類型
                 response.setContentType("application/json;charset=utf-8");
      
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容