Ajax
1.1 ajax簡介
Ajax全稱爲「Asynchronous JavaScript and XML」(異步JavaScript和XML),是一種建立交互式網頁應用的網頁開發技術。javascript
Ajax是一種無需從新加載整個頁面的狀況下,可以更新部分網頁的技術。java
Ajax = 異步 JavaScript和XML。jquery
同步:同步方法調用一旦開始,調用者必須等到方法調用返回後,才能繼續後續的行爲。ajax
異步:異步方法調用更像一個消息傳遞,一旦開始,方法調用就會當即返回,調用者就能夠繼續後續的操做。json
Ajax經過在後臺與服務器進行少許數據交換,Ajax可使網頁實現異步更新。這意味着能夠在不從新加載整個頁面的狀況下,對網頁的某部分進行更新。數組
傳統的網頁(不適用Ajax)若是須要更新內容,必須重載整個網頁。瀏覽器
有不少使用Ajax的應用案例程序案例:新浪微博、Google地圖、開心網等;服務器
1.2 XMLHttpRequest
XMLHttpRequest對象網絡
XMLHttpRequest是Ajax的基礎,全部如今瀏覽器均支持XMLHttpRequest對象(IE5和IE6使用ActiveXObject)。app
全部現代瀏覽器(IE7+、Firefox、Chrome、Safari以及Opera)均內建XMLHttpRequest對象。
XMLHttpRequest用於在後臺與服務器交換數據。這意味着能夠在不從新加載整個頁面的狀況下,對頁面的某部分進行更新。
XMLHttpRequest使用流程
一、建立XMLHttpRequest對象
二、請求(同步或者異步請求)
三、響應
Request的Open方法
注意:默認方法是異步的,也就是開子線程,同步方法已經被廢棄,不能再用
1.3 Ajax準備狀態碼
request.readyState
0:請求未初始化
1:服務器鏈接已創建
2:請求已接收
3:請求處理中
4:請求已完成,且響應已就緒
1.4 Http響應狀態
request.status
200:‘OK’
404:未找到頁面
405:用來訪問本頁面的HTTP方法不被容許,也就是post不能請求get
1.5 獲取響應數據
request.responeText
1.6 登陸的get案例
Step1:寫一個get登陸表單
Step2:寫一個LoginServlet
Step3:ajax的get請求
1.7 登陸的post案例
ajax的post請求流程
1.建立請求對象
2.鏈接
3.設置content-type請求頭(若是不設置請求頭,發送請求會失敗)
4.發送請求,傳遞請求參數
5.接收響應
2 JSON字符串
1.JSON指的是JavaScript對象表示法(JavaScript Object Notation)
2. JSON 是輕量級的文本數據交換格式
3. JSON獨立於語言
4. JSON具備自我描述性,更易理解。
2.1 Json字典
至關於java的map(鍵值對){「firstName」:「Bill」,「lastName」:「Gates」}
2.2 Json數組
至關於數組裏存了map,字典
[
{ "firstName":"Bill" , "lastName":"Gates" },
{ "firstName":"George" , "lastName":"Bush" },
{ "firstName":"Thomas" , "lastName":"Carter" }
]
2.3 Json字典
字典裏面存數組
{
"employees": [
{ "firstName":"Bill" , "lastName":"Gates" },
{ "firstName":"George" , "lastName":"Bush" },
{ "firstName":"Thomas" , "lastName":"Carter" }
]
}
2.4 js中的json對象和字符串相互轉換
3.1 Jackson簡介
Jackson是一個簡單基於Java應用庫,Jackson能夠輕鬆的將Java對象轉換成json字符串和xml文檔,一樣也能夠將json、xml轉換成Java對象。Jackson所依賴的jar包較少,簡單易用而且性能也要相對高些,而且Jackson社區相對比較活躍,更新速度也比較快。
3.2 jackson特色
一、容易使用- jackson API提供了一個高層次外觀,以簡化經常使用的用例。
二、無需建立映射- API提供了默認的映射大部分對象序列化。
三、性能高-快速,低內存佔用,適合大型對象圖表或系統。
四、乾淨的JSON - jackson建立一個乾淨和緊湊的JSON結果,這是讓人很容易閱讀。
五、不依賴-庫不須要任何其餘的庫,除了JDK。
六、開源代碼- jackson是開源的,能夠無償使用。
3.3對象轉json字符串案例
3.4 json字符串轉對象
String str = "{\"id\":\"1001\",\"name\":\"Java入門\",\"price\":19.88,\"pnum\":100,\"category\":\"IT\",\"description\":\"Good Book\"}";
System.out.println(str);//建立 "對象映射" 對象
ObjectMapper mapper = new ObjectMapper();
Book book = mapper.readValue(str, Book.class);
System.out.println(book);
4 ajax處理json數據
5 get請求中文處理
1.請求的url後面的參數不能傳中文
2.工做中對get請求對中文進行url編碼
3.url編碼是什麼
URL編碼遵循下列規則: 每對name/value由&;符分開;每對來自表單的name/value由=符分開。若是用 解碼軟件 解碼軟件 戶沒有輸入值給這個name,那麼這個name仍是出現,只是無值。任何特殊的字符(就是那些不是簡單的七位ASCII,如漢字)將以百分符%用十六進制編碼,固然也包括象 =,&;,和 % 這些特殊的字符。其實url編碼就是一個字符ascii碼的十六進制。
js提供的url編碼和解碼
encodeURIComponent編碼與decodeURIComponent 解碼
encodeURI與decodeURIL
encodeURI()與encodeURIComponent()區別
二者的區別在於,encodeURI函數不會對如下的字符進行處理: 「! @ # $ & * ( ) = : / ; ? + ' 」
推薦使用encodeURIComponent()
f]默認狀況下ajax,瀏覽器會對url進行編碼
案例:
<script type="text/javascript">
var urlStr = 'LoginServlet?username=張三丰&password=123';
//1.對字符串進行url編碼,會對一些特殊字符串,好比中文,:,&,?號進行編碼
var u1 = encodeURIComponent(urlStr);
var u2 = encodeURI(urlStr)
console.log(u1);
console.log(u2);
//2.對url進行解碼,還原原始模樣
console.log(decodeURIComponent(u1));
console.log(decodeURIComponent(u2));
</script>
對前面get請求進行url編碼
6 ajax的兼容性問題
var request;
if (window.XMLHttpRequest)
{
// IE7+, Firefox, Chrome, Opera, Safari瀏覽器執行代碼
request=new XMLHttpRequest();
}
else
{
// IE6, IE5瀏覽器執行代碼
request=new ActiveXObject("Microsoft.XMLHTTP");
}
7. 總結
工做中使用ajax是用於發送get/post的網絡異步請求,工做中用的更多的是jquery封裝好的get/post請求。