1. 程式人生 > 實用技巧 >筆記3:Ajax&&Json基礎

筆記3:Ajax&&Json基礎

一、AJAX筆記

1. 原生的JS實現方式(瞭解)

//1.建立核心物件
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. 建立連線
/*
	引數:
		1. 請求方式:GET、POST
			* get方式,請求引數在URL後邊拼接。send方法為空參
			* post方式,請求引數在send方法中定義
		2. 請求的URL:
		3. 同步或非同步請求:true(非同步)或 false(同步)

 */
xmlhttp.open("GET","ajaxServlet?username=tom",true);
//3.傳送請求
xmlhttp.send();
//4.接受並處理來自伺服器的響應結果
//獲取方式 :xmlhttp.responseText
//什麼時候獲取?當伺服器響應成功後再獲取
//當xmlhttp物件的就緒狀態改變時,觸發事件onreadystatechange。
xmlhttp.onreadystatechange=function()
{
	//判斷readyState就緒狀態是否為4,判斷status響應狀態碼是否為200
	if (xmlhttp.readyState==4 && xmlhttp.status==200)
	{
	   //獲取伺服器的響應結果
		var responseText = xmlhttp.responseText;
		alert(responseText);
	}
}

2. JQeury實現方式

---$.ajax()
	* 語法:$.ajax({鍵值對});
	//使用$.ajax()傳送非同步請求
	$.ajax({
		url:"ajaxServlet1111" ,                  //請求路徑
		type:"POST" ,                            //請求方式
		//data: "username=jack&age=23",          //請求引數  兩種格式
		data:{"username":"jack","age":23},
		success:function (data) {                //響應成功後的回撥函式
			alert(data);
		},									
		error:function () {                      //表示如果請求響應出現錯誤,會執行的回撥函式
			alert("出錯啦...")
		},									
		dataType:"text"                          //設定接受到的響應資料的格式
	});
---$.get():傳送get請求                語法:$.get(url, [data], [callback], [type])
---$.post():傳送post請求              語法:$.post(url, [data], [callback], [type])
	* 引數:
	* url:請求路徑
	* data:請求引數		{鍵:"值",.....}
	* callback:回撥函式
	* type:響應結果的型別

二、json筆記

JSON===JavaScript Object Notation	JavaScript物件表示法	最初用來封裝物件
格式例如:var p = {"name":"張三","age":23,"gender":"男"};
功能:json現在多用於儲存和交換文字資訊的語法		進行資料的傳輸	
特點:JSON 比 XML 更小、更快,更易解析。

語法:

基本規則

----json資料是由鍵值對構成的
----多個鍵值對逗號分隔
----花括號儲存物件:使用{}定義json 格式
----方括號儲存陣列:[]
      * 鍵用引號(單雙都行)引起來,也可以不使用引號
      * 值得取值型別:
	1. 數字(整數或浮點數)
	2. 字串(在雙引號中)
	3. 邏輯值(true 或 false)
	4. 陣列(在方括號中)	{"persons":[{},{}]}
	5. 物件(在花括號中) {"address":{"province":"陝西"....}}
	6. null

獲取資料:

1. json物件.鍵名
2. json物件["鍵名"]
3. 陣列物件[索引]
4. 遍歷
	//獲取ps中的所有值	ps為儲存了persons資料的json		
	for (var i = 0; i < ps.length; i++) {
		var p = ps[i];
		for(var key in p){
			alert(key+":"+p[key]);
		}
	}
	for(var key in person){
		
		//alert(key + ":" + person.key);
                  //這樣的獲取不了,因為key是字串
                  //person.key相當於person."鍵名"
		  //person.鍵名才可以獲取
		alert(key+":"+person[key]);
	}

JSON資料和Java物件的相互轉換

	----常見的JSON解析器:Jsonlib,Gson,fastjson,jackson
	1. JSON轉為Java物件
		1. 匯入jackson的相關jar包
			com.fasterxml.jackson.core:jackson-annotations:2.9.0
			com.fasterxml.jackson.core:jackson-core:2.9.0
			com.fasterxml.jackson.core:jackson-databind:2.9.0
		2. 建立Jackson核心物件 ObjectMapper
		3. 呼叫ObjectMapper的相關方法進行轉換
			1. readValue(json字串資料,Class)
	2. Java物件轉換JSON
		1. 匯入jackson的相關jar包
		2. 建立Jackson核心物件 ObjectMapper
		3. 呼叫ObjectMapper的相關方法進行轉換
			1. 轉換方法:java物件  List陣列  Map物件轉換方法一樣
				* writeValue(引數1,obj) 
					引數1:
						File:將obj物件轉換為JSON字串,並儲存到指定的檔案中
						Writer:將obj物件轉換為JSON字串,並將json資料填充到字元輸出流中
						OutputStream:將obj物件轉換為JSON字串,並將json資料填充到位元組輸出流中

	----伺服器響應的資料,在客戶端使用時,要想當做json資料格式使用。有兩種解決方案:
		1. $.get(type):將最後一個引數type指定為"json"
		2. 在伺服器端設定MIME型別
			response.setContentType("application/json;charset=utf-8");