1. 程式人生 > 其它 >『現學現忘』Docker基礎 — 9、Docker簡介

『現學現忘』Docker基礎 — 9、Docker簡介

AJAX和JSON

JSON

1.什麼是JSON?

  • 是一種輕量級的資料交換格式
  • 輕量級是指跟xml比較
  • 資料交換指的是客戶端和伺服器之間業務資料的傳遞格式

2.JSON在JavaScript中的使用(客戶端)

json的定義

  • json是由鍵值對組成,並且由花括號{}包圍,每個鍵由引號引起來,鍵和值之間用冒號分隔,多組鍵值之間用逗號分隔

    <!--json定義-->
    var json={
    	"a":1,
    	"b":2,
    	"c":true,
    	"d":"aaa",
    	"e":[1,2],
    	"f":{	//json裡嵌入json
    		"a":1,
    		"b":2,
    		"c":"t"
    	},
    	"g":[//數組裡嵌入多個json
    			{
    		"a":1,"b":2,"c":3
    	},{
    		"a":1,"b":2,"c":3
    	}]
    }
    		</script>
    

json的訪問

是一個物件,跟訪問物件一樣

alert(typeof (json))   //object 物件
alert(json.e)			//獲取陣列的全部值
alert(json.g[0].c)		//獲取陣列中的一個json物件裡的值
alert(json.f.c)			//獲取json物件裡的json物件裡的其中一個值
//遍歷陣列
var G=json.e
for (let i = 0; i <G.length; i++) {
	console.log(G[i])
}

json常用的兩個方法

json有兩種存在方式:
  1. 物件的存在,json物件

    一般要操作json物件的資料的話,要用json物件格式

  2. 字串形式的存在,json字串

    一般要在服務端和客戶端進行資料交換的時候,就用json字串

JSON.stringify()

JSON.parse()

//JSON.stringify(),將json物件轉為字串,這個字串特別像java裡的toString格式
var a=JSON.stringify(json)
alert(a)
console.log(a)
//JSON.parse(),將json字串轉為物件
var b=JSON.parse(a)
alert(b)

3.JSON在java中的使用(服務端)

首先必須導包

谷歌的依賴  
<dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.1</version>
    </dependency>

JSON和JavaBean的轉換

// JSON和JavaBean的轉換
    @Test
    public void test1(){
        Person person = new Person(1,"劉超好帥");
//        建立Gson物件例項
        Gson gson = new Gson();
//        toJson()可以將java物件轉換為json字串
        String s = gson.toJson(person);
        System.out.println(s);
//        把json字串轉換為java物件
//        第一個引數是json字串
//        第二個引數是轉換回去的java物件
        Person person1 = gson.fromJson(s, person.getClass());
        person1.setId(2);
        System.out.println(person1.getId());
    }

JSON和List的轉換

建立一個類繼承ypeToken

//JSON和List的轉換
@Test
public void test2(){
    List<Person> PersonList=new ArrayList<>();
    PersonList.add(new Person(1,"很好"));
    PersonList.add(new Person(2,"很吊"));
    Gson gson = new Gson();
//    將list集合轉換成json字串
    String s = gson.toJson(PersonList);
    System.out.println(s);
//    第二個引數必須我們建立一個類繼承TypeToken(來著匯入的JSOn的jar包), public class ListType extends TypeToken<ArrayList<Person>>
    List list= gson.fromJson(s,new TypeToken<ArrayList<Person>>(){}.getType());
    
    System.out.println(list.get(1));
}

JSON和Map轉換

替換掉建立一個類繼承ypeToken,改用使用匿名內部類的方式

//具體跟list轉換一樣
//JSON和Map轉換
@Test
public void test3(){
        Map<Integer,String> map=new HashMap<>();
        map.put(1,"我好帥");
        map.put(2,"太帥了");
        Gson g=new Gson();
       String s = g.toJson(map);
       System.out.println(s);
       Map m= g.fromJson(s,new MapType().getType());
//那我們每轉換一種都要建立一個類繼承TypeToken太不方便,這裡我們可以使用匿名內部類的方式
       Map m1= g.fromJson(s,new TypeToken<HashMap<Integer,String>>(){}.getType());
//       System.out.println(m.get(1));
       System.out.println(m1.get(1));

AJAX

1 什麼是AJAX:

Asynchronous JavaScript and XML(非同步的 JavaScript 和 XML)。

ajax是一種瀏覽器通過js非同步發起請求,區域性更新頁面的技術,位址列不會發生改變,不會捨棄原來頁面的內容

  • 非同步和同步:客戶端和服務端相互通訊的基礎上

    • 客戶端必須等待服務端的響應,在等待的期間什麼都做不了
    • 客戶端不需要等待服務端的請求,在服務端處理請求的時候,客戶端可以進行其他操作

    Ajax是一種在無需重新載入整個網頁的情況下,能夠更新分網頁的技木。是
    通過在後臺與伺服器進行少量資料交換,Aax可以使網頁實現非同步更新。這意味著可以在不重新載入整個網頁的情況下,對網歷的某部分講行更新
    內容,必須過載整個網頁頁面。

2 實現:

2.1使用原生的AJAX請求

客戶端	
<script type="text/javascript">
<!--在這裡使用js發起請求,訪問伺服器AjAXServlet的javasrciptAjAX方法-->
			function ajaxRequest(){
//			1.建立XMLHttpRequest物件
			var XMLrequest=new XMLHttpRequest();
//			2.呼叫open方法設定請求引數
			XMLrequest.open("Post","http://localhost:8080/AjAXServelt?action=javasrciptAjAX",true)
//			3.在send方法前繫結onreadystatechange事件,處理請求後的操作
				XMLrequest.onreadystatechange=function () {
					if (XMLrequest.readyState==4 && XML request.status==200){
//使div為divid的標籤內容(HTML)為
                       document.getElementById("div01").innerHTML=XMLrequest.responseText
					}
				}
//			4.傳送請求給伺服器
			XMLrequest.send()
			}
		</script>
服務端   
protected void javasrciptAjAX(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("ajax請求過來了");
        Person person = new Person(1, "劉超好帥");
//        轉化為json字串
        Gson gson = new Gson();
        String s = gson.toJson(person);
        resp.getWriter().write(s);
    }

2.2 Jquery實現AJAX

$.ajax方法

url 表示請求的地址
type 表示請求的型別GET 或POST請求
data 表示傳送給伺服器的資料
格式有兩種:
一: name=value&name=value

二:{key:value}
success 請求成功,響應的回撥函式
dataType 響應的資料型別

常用資料型別:text(純文字),xml,json物件

$.ajax({
						url:"http://localhost:8080/AjAXServlet",
						data: "action=jqueryAjAX",
						type:"GET",
						success:function (data) {
							alert("伺服器返回的資料是:" + data);
							// var jsonObj = JSON.parse(data);
							$("#msg").html(" ajax 編號:" + data.id + " , 姓名:" + data.name);
						},
						// dataType : "text"
						dataType : "json"
					});

$.get()

$.post()

url:請求的url地址

data:傳送的資料

callback:載入成功的回撥函式

type:返回內容格式

比起$.ajax少了type,因為get,post方法就限制了請求的型別了

$("#getBtn").click(function () {
				$.get( "http://localhost:8080/AjAXServlet", "action=jquerygetAjAX", function (data){
						alert("get")
					}, "json"
				)
			})
				$("#postBtn").click(function () {
					$.post({
						url: "http://localhost:8080/AjAXServlet",
						data: "action=jquerypostAjAX",
						Callbacks:function (data){
							alert("post")
						},
						type: "json"
					})
				})

$.getJSON()

url:請求的地址

data:傳送的資料

callback:成功的回撥函式

比起get,post少了type(響應的格式),這個方法限制只能返回json型別並且是get請求

document.getElementById("getJSONBtn").click(function () {
				$.getJSON("http://localhost:8080/AjAXServlet","action=jquerypostAjAX",function (data){
					alert("post")
				})	

表單序列化serialize()

獲取表單的所有內容,並將它拼接成name=value&&password=value

$("#submit").click(function () {
				$.getJSON("http://localhost:8080/AjAXServlet","action=jquerypostAjAX&"+$("#form01").serialize(),function (data){
					alert("serialize")
				})