Ajax
AJAX即“Asynchronous Javascript And XML”:是,不發生頁面跳轉、異步請求載入内容并改寫局部頁面内容的技術。
也可以簡單的了解為通過JS向伺服器發送請求。
同步處理:
就是當我們通過一個頁面向伺服器發送一個請求時,在伺服器響應結束之前,我們的整個頁面是不能操作的,并且即使整個頁面中隻有一小部分内容發生改變我們也要重新整理整個頁面。
異步處理:
通過AJAX向伺服器發送請求,當伺服器正常響應請求後,響應資訊會直接發送到AJAX中,AJAX可以根據伺服器響應的内容做一些操作。并可局部的修改頁面,而不需要整個頁面重新整理。
請求對象:XMLHttpRequest
- XMLHttpRequest對象用來封裝請求封包,我們向伺服器發送的請求資訊全部都需要封裝到該對象中。
擷取XMLHttpRequest對象,不同浏覽器之間有差異
//擷取XMLHttpRequest的通用方法
function getXMLHttpRequest(){
var xhr;
try{
//大部分浏覽器都支援
xhr = new XMLHttpRequest();
}catch(e){
try{
//如果不支援,在這裡捕獲異常并且采用IE6支援的方式
xhr = new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
//如果還不支援,在這裡捕獲異常并采用IE5支援的方式
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xhr;
}
XMLHttpRequest對象的方法
- open(method,url,async):用于設定請求的基本資訊,接收三個參數。
-
參數一:method
接收一個字元串,表明請求的方法:get或post
-
參數二:url
請求的位址,接收一個字元串
-
參數三:Assync
發送的請求是否為異步請求,接收一個布爾值。① true 是異步請求 ② false 不是異步請求(同步請求)
-
- send(string):用于将請求發送給伺服器,可以接收一個參數
-
string參數
該參數隻在發送post請求時需要。用于設定請求體
-
- setRequestHeader(header,value):用于設定請求頭
-
參數一:header參數
字元串類型,要設定的請求頭的名字
-
參數二:value參數
字元串類型,要設定的請求頭的值
-
XMLHttpRequest對象的屬性
- readyState
- 描述XMLHttpRequest的狀态
- 一共有五種狀态分别對應了五個數字:
- 0 :請求尚未初始化,open()尚未被調用
- 1 :伺服器連接配接已建立,send()尚未被調用
- 2 :請求已接收,伺服器尚未響應
- 3 :請求已處理,正在接收伺服器發送的響應
- 4 :請求已處理完畢,且響應已就緒。
- status
- 請求的響應碼
- 200 響應成功
- 404 頁面為找到
-
500 伺服器内部錯誤
......
- 請求的響應碼
- onreadystatechange
- 該屬性需要指向一個函數
- 該函數會在readyState屬性發生改變時被調用
- responseText
- 獲得字元串形式的響應資料。
- responseXML(用的比較少)
- 獲得 XML 形式的響應資料。
JQuery的Ajax請求
四個Ajax請求方法
- $.ajax方法
- $.get方法
- $.post方法
- $.getJSON方法
一個表單序列化方法:serialize()表單序列化方法
$.ajax請求
- url: 請求的位址
- type : 請求的方式 get或post
- data : 請求的參數 string或json
- success: 成功的回調函數
- dataType: 傳回的資料類型 常用json或text
$.get和$.post請求
- url:請求的URL位址
- data:待發送 Key/value 參數。
- callback:載入成功時回調函數。
- type:傳回内容格式,xml, html, script, json, text。
$.getJSON請求
- url:待載入頁面的URL位址
表單的序列化
- serialize() 方法可以把一個form表單中所有的表單項。都以字元串name=value&name=value的形式進行拼接
$.ajax({
url : "ajaxServlet", // 請求位址
error:function(){ // 請求失敗回調
alert("請求失敗");
},
success:function(data){ // 請求成功回調
alert( data );
},
type:"POST", // 請求的方式
dataType:"json", // 傳回的資料類型為json對象
data:{ // 請求的參數
action:"jqueryAjax",
a:12,
date: new Date()
}
});
JSON
JSON是JavaScript Object Notation 的縮寫,是JS提供的一種輕量級的資料交換格式, 易于人閱讀和編寫。同時也易于機器解析和生成。
JSON對象本質上就是一個JS對象,但是這個對象比較特殊,它可以直接轉換為字元串,在不同語言中進行傳遞,通過工具又可以轉換為其他語言中的對象。
在标準的json格式中,json對象由大括号括起來,對象中的屬性也就是json的key是一個字元串,是以一定要使用雙引号引起來。每組key之間使用逗号進行分隔。
JSON 6種資料類型
- 字元串 //注意:不能使用單引号
- 數字
- 布爾值
- null值
- 對象
- 例子:{“name”:”sunwukong”, ”age”:18}
- 數組
- 例子:[1,”str”,true]
JSON對象的通路
key就是對象的屬性。我們要通路一個對象的屬性,隻需要使用【對象名.屬性名】的方式通路即可。
JSON對象和字元串對象的互轉
- JSON.stringify( json ):此方法可以把一個json對象轉換成為json字元串
- JSON.parse( jsonString ): 此方法可以把一個json字元串轉換成為json對象
JSON在Java中的使用
Gson 提供了用來在 Java 對象和 JSON 資料之間進行映射的 Java 類庫,可以将一個 JSON 字元串轉成一個 Java 對象,或者反過來。
- java對象和json的轉換
- java對象list集合和json的轉換
- map對象和json的轉換
// json操作,一定要先new一個gson對象。
Gson gson = new Gson();
// 1、把對象轉成為json字元串
String personjson = gson.toJson(person);
// 把json字元串轉換成為java對象
Person p = gson.fromJson(personjson, Person.class);
//2、java對象list集合和json的轉換
String jsonListString = gson.toJson(list);
// 把json數組轉換成為List對象
List<Person> ps = gson.fromJson(jsonListString, new PersonType().getType());
// 3、map對象和json的轉換
String jsonMapString = gson.toJson(mapPerson);
// 通過使用匿名内部類的方式
Map<String, Person> map = gson.fromJson(jsonMapString,new TypeToken<HashMap<String, Person>>() {}.getType());