Ajax
1.1 ajax簡介
Ajax全稱為“Asynchronous JavaScript and XML”(異步JavaScript和XML)颜说,是一種創(chuàng)建交互式網(wǎng)頁應(yīng)用的網(wǎng)頁開發(fā)技術(shù)。
Ajax是一種無需重新加載整個頁面的情況下斑鸦,能夠更新部分網(wǎng)頁的技術(shù)库倘。
Ajax = 異步? JavaScript和XML。
同步:同步方法調(diào)用一旦開始诫惭,調(diào)用者必須等到方法調(diào)用返回后檩奠,才能繼續(xù)后續(xù)的行為桩了。
異步:異步方法調(diào)用更像一個消息傳遞,一旦開始埠戳,方法調(diào)用就會立即返回井誉,調(diào)用者就可以繼續(xù)后續(xù)的操作。
Ajax通過在后臺與服務(wù)器進行少量數(shù)據(jù)交換整胃,Ajax可以使網(wǎng)頁實現(xiàn)異步更新颗圣。這意味著可以在不重新加載整個頁面的情況下,對網(wǎng)頁的某部分進行更新屁使。
傳統(tǒng)的網(wǎng)頁(不適用Ajax)如果需要更新內(nèi)容在岂,必須重載整個網(wǎng)頁。
有很多使用Ajax的應(yīng)用案例程序案例:新浪微博屋灌、Google地圖洁段、開心網(wǎng)等;
1.2 XMLHttpRequest
XMLHttpRequest對象
XMLHttpRequest是Ajax的基礎(chǔ)共郭,所有現(xiàn)在瀏覽器均支持XMLHttpRequest對象(IE5和IE6使用ActiveXObject)。
所有現(xiàn)代瀏覽器(IE7+疾呻、Firefox除嘹、Chrome、Safari以及Opera)均內(nèi)建XMLHttpRequest對象岸蜗。
XMLHttpRequest用于在后臺與服務(wù)器交換數(shù)據(jù)尉咕。這意味著可以在不重新加載整個頁面的情況下,對頁面的某部分進行更新璃岳。
XMLHttpRequest使用流程
1年缎、創(chuàng)建XMLHttpRequest對象
2、請求(同步或者異步請求)
3铃慷、響應(yīng)
Request的Open方法
注意:默認方法是異步的单芜,也就是開子線程,同步方法已經(jīng)被廢棄犁柜,不能再用
1.3 Ajax準備狀態(tài)碼
request.readyState
0:請求未初始化
1:服務(wù)器連接已建立
2:請求已接收
3:請求處理中
4:請求已完成洲鸠,且響應(yīng)已就緒
1.4 Http響應(yīng)狀態(tài)
request.status
200:‘OK’
404:未找到頁面
405:用來訪問本頁面的HTTP方法不被允許,也就是post不能請求get
1.5 獲取響應(yīng)數(shù)據(jù)
request.responeText
1.6 登錄的get案例
Step1:寫一個get登錄表單
Step2:寫一個LoginServlet
Step3:ajax的get請求
1.7 登錄的post案例
ajax的post請求流程
1.創(chuàng)建請求對象
2.連接
3.設(shè)置content-type請求頭(如果不設(shè)置請求頭,發(fā)送請求會失敯峭蟆)
4.發(fā)送請求绢淀,傳遞請求參數(shù)
5.接收響應(yīng)
2 JSON字符串
1.JSON指的是JavaScript對象表示法(JavaScript Object Notation)
2. JSON 是輕量級的文本數(shù)據(jù)交換格式
3. JSON獨立于語言
4. JSON具有自我描述性,更易理解瘾腰。
2.1 Json字典
相當(dāng)于java的map(鍵值對){“firstName”:“Bill”皆的,“l(fā)astName”:“Gates”}
2.2 Json數(shù)組
相當(dāng)于數(shù)組里存了map,字典
[
{ "firstName":"Bill" , "lastName":"Gates" },
{ "firstName":"George" , "lastName":"Bush" },
{ "firstName":"Thomas" , "lastName":"Carter" }
]
2.3 Json字典
字典里面存數(shù)組
{
"employees": [
{ "firstName":"Bill" , "lastName":"Gates" },
{ "firstName":"George" , "lastName":"Bush" },
{ "firstName":"Thomas" , "lastName":"Carter" }
]
}
2.4 js中的json對象和字符串相互轉(zhuǎn)換
3.1 Jackson簡介
Jackson是一個簡單基于Java應(yīng)用庫,Jackson可以輕松的將Java對象轉(zhuǎn)換成json字符串和xml文檔蹋盆,同樣也可以將json祭务、xml轉(zhuǎn)換成Java對象。Jackson所依賴的jar包較少怪嫌,簡單易用并且性能也要相對高些义锥,并且Jackson社區(qū)相對比較活躍,更新速度也比較快岩灭。
3.2 jackson特點
1拌倍、容易使用- jackson API提供了一個高層次外觀,以簡化常用的用例噪径。
2柱恤、無需創(chuàng)建映射- API提供了默認的映射大部分對象序列化。
3找爱、性能高-快速梗顺,低內(nèi)存占用,適合大型對象圖表或系統(tǒng)车摄。
4寺谤、干凈的JSON - jackson創(chuàng)建一個干凈和緊湊的JSON結(jié)果,這是讓人很容易閱讀吮播。
5变屁、不依賴-庫不需要任何其他的庫,除了JDK意狠。
6粟关、開源代碼- jackson是開源的,可以免費使用环戈。
3.3對象轉(zhuǎn)json字符串案例
3.4 json字符串轉(zhuǎn)對象
String?str?= "{\"id\":\"1001\",\"name\":\"Java入門\",\"price\":19.88,\"pnum\":100,\"category\":\"IT\",\"description\":\"Good Book\"}";
System.out.println(str);//創(chuàng)建 "對象映射" 對象
ObjectMapper mapper?=?new?ObjectMapper();
Book book?= mapper.readValue(str, Book.class);
System.out.println(book);
4 ajax處理json數(shù)據(jù)
5 get請求中文處理
1.請求的url后面的參數(shù)不能傳中文
2.工作中對get請求對中文進行url編碼
3.url編碼是什么
URL編碼遵循下列規(guī)則: 每對name/value由&闷板;符分開;每對來自表單的name/value由=符分開院塞。如果用 解碼軟件 解碼軟件 戶沒有輸入值給這個name遮晚,那么這個name還是出現(xiàn),只是無值迫悠。任何特殊的字符(就是那些不是簡單的七位ASCII鹏漆,如漢字)將以百分符%用十六進制編碼,當(dāng)然也包括象 =,&;艺玲,和 % 這些特殊的字符括蝠。其實url編碼就是一個字符ascii碼的十六進制。
js提供的url編碼和解碼
encodeURIComponent編碼與decodeURIComponent 解碼
encodeURI與decodeURIL
encodeURI()與encodeURIComponent()區(qū)別
兩者的區(qū)別在于,encodeURI函數(shù)不會對以下的字符進行處理: “! @ # $ & * ( ) = : / ; ? + ' ”
推薦使用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瀏覽器執(zhí)行代碼
request=new XMLHttpRequest();
}
else
{
// IE6, IE5瀏覽器執(zhí)行代碼
request=new ActiveXObject("Microsoft.XMLHTTP");
}
7. 總結(jié)
工作中使用ajax是用于發(fā)送get/post的網(wǎng)絡(luò)異步請求饭聚,工作中用的更多的是jquery封裝好的get/post請求忌警。