ajax總結(jié)

18.3.23
·AJAX概念簡(jiǎn)述、內(nèi)部實(shí)現(xiàn)原理

·常用方法:load()、$.get()、$.post()宿礁、$.getScript()、$.getJson()和serialize()還有$.ajax()
·ajax() 方法蔬芥、參數(shù)梆靖、回調(diào)函數(shù)控汉、參考手冊(cè)
·其他未整理

AJAX概念簡(jiǎn)述、內(nèi)部實(shí)現(xiàn)原理

參考來(lái)源:https://blog.csdn.net/drug_/article/details/73823856

概念簡(jiǎn)述

Asynchronous Javascript And XML(異步JavaScript和XML)

AJAX并不是一種語(yǔ)言,而是一種創(chuàng)建交互網(wǎng)頁(yè)應(yīng)用的網(wǎng)頁(yè)開(kāi)發(fā)技術(shù) AJAX是Javascript返吻、XHTML和CSS姑子、DOM、XML和XSTL测僵、XMLHttpRequest 等技術(shù)的組合

1.使用XHTML+CSS來(lái)標(biāo)準(zhǔn)化呈現(xiàn);
2.使用XML和XSLT進(jìn)行數(shù)據(jù)交換及相關(guān)操作;
3.使用XMLHttpRequest對(duì)象與Web服務(wù)器進(jìn)行異步數(shù)據(jù)通信;
4.使用Javascript操作Document Object Model(網(wǎng)絡(luò)文檔對(duì)象模型)進(jìn)行動(dòng)態(tài)顯示及交互;
5.使用JavaScript綁定和處理所有數(shù)據(jù)

AJAX核心對(duì)象是XMLHttpRequest

二街佑、AJAX優(yōu)缺點(diǎn): AJAX異步處理優(yōu)點(diǎn): 減輕服務(wù)器的負(fù)擔(dān),AJAX一般只從服務(wù)器獲取只需要的數(shù)據(jù) 無(wú)刷新頁(yè)面更新,減少用戶(hù)等待的時(shí)間 更好的客戶(hù)體驗(yàn),可以將一些服務(wù)器的工作轉(zhuǎn)移到客戶(hù)端來(lái)完成,節(jié)約網(wǎng)絡(luò)資源,提高用戶(hù)體驗(yàn) 無(wú)平臺(tái)限制 促進(jìn)顯示與數(shù)據(jù)想分離

AJAX異步處理的缺點(diǎn): 頁(yè)面中存在大量JS,給搜索引擎帶來(lái)困難 AJAX干掉了Back和History功能,即對(duì)瀏覽器機(jī)制的破壞 存在跨域問(wèn)題 只能傳輸及接收utf-8編碼數(shù)據(jù)

三、JSON
Javascript Object Notation,是一種輕量級(jí)的數(shù)據(jù)交換格式 JSON每種語(yǔ)言都認(rèn)識(shí)他所以用他進(jìn)行各種語(yǔ)言的數(shù)據(jù)的轉(zhuǎn)換 JSON支持多種語(yǔ)言 格式 {key:value,key:value,.....}對(duì)象格式 [{key:value,key:value,.....},{key:value,key:value,.....},......]數(shù)組格式 JavaScript處理: eval('('+json+')') //將某個(gè)字符串按照J(rèn)S代碼來(lái)執(zhí)行 例: eval("x=10;y=20;document.write(x*y)")
document.write(eval("2+2"))
JSON.parse(json) //對(duì)傳過(guò)來(lái)的json字符串進(jìn)行解碼恨课,變成JS認(rèn)識(shí)的對(duì)象 JSON.stringify(obj) //將JS中的值編譯成json字符串

·常用方法:

load()舆乔、$.get()岳服、$.post()剂公、$.getScript()和$.getJson()還有$.ajax()
參考:https://www.cnblogs.com/xiaoxiaoyihan/p/6050854.html
https://www.cnblogs.com/LuckyWinty/p/5279032.html——使用ajaxSetup()方法設(shè)置全局Ajax默認(rèn)選項(xiàng)、使用ajaxStart()和ajaxStop()方法
https://www.cnblogs.com/ranzige/p/4103203.html

一吊宋、load()
load(url [,data] [,callback])
url(String):服務(wù)端資源的url纲辽。
data(Obejct):發(fā)送到服務(wù)器的key/value數(shù)據(jù)
callback(Function):請(qǐng)求完成時(shí)(無(wú)論成功或失敗)的回調(diào)函數(shù),在響應(yīng)數(shù)據(jù)已經(jīng)加載到包裝集元素之后被調(diào)用璃搜。傳入這個(gè)函數(shù)的參數(shù)是響應(yīng)文本拖吼、狀態(tài)碼、以及xhr實(shí)例这吻。
load()的傳遞方式根據(jù)參數(shù)data來(lái)自動(dòng)指定吊档。如果沒(méi)有參數(shù),則采用GET方式傳遞唾糯,否則怠硼,會(huì)自動(dòng)轉(zhuǎn)換為POST方式。
load()可以遠(yuǎn)程載入HTML并插入到DOM中移怯。
一定要在一個(gè)標(biāo)簽jquery的基礎(chǔ)上使用香璃,返回一定是頁(yè)面。
load()常用來(lái)從web服務(wù)器上獲取靜態(tài)的數(shù)據(jù)文件舟误。如果要向服務(wù)器傳遞參數(shù)葡秒,可以使用<nobr aria-hidden="true">.get()或</nobr>.post()方法。
例子:
<script type="text/javascript">
$(function () {
// 點(diǎn)擊按鈕嵌溢,觸發(fā)加載動(dòng)作
$("#btn").click(function () {
// 將xxxx.html加載進(jìn)id為“show”的元素里
$("#show").load("xxxx.html");
});
})
</script>
$("#show").load("xxxx.html", function (responseText, textStatus, XMLHttpRequest) {
alert(responseText);// 請(qǐng)求返回的內(nèi)容
alert(textStatus); // 請(qǐng)求狀態(tài)
alert(XMLHttpRequest);// XMLHttpRequest對(duì)象
});

二眯牧、$.get()
$.get(url [, data] [, callback] [, type])
<script type="text/javascript">
$(function () {
$("#send").click(function () {
// 點(diǎn)擊按鈕觸發(fā)get請(qǐng)求
$.get("get1.jsp", {
// 向服務(wù)器傳遞參數(shù),encodeURI進(jìn)行完整編碼
username: encodeURI($("#username").val()),
location: encodeURI($("#location").val()),
contentTxt: encodeURI($("#contentTxt").val())
}, function (data, textStatus) {
// alert(textStatus); // 返回請(qǐng)求狀態(tài)
// alert(decodeURI(data)); // 返回請(qǐng)求的狀態(tài)
// 將返回的數(shù)據(jù)添加到id為“resText”的元素中
$("#resText").html(decodeURI(data));
})
});
})
</script>
<script type="text/javascript">
$(function () {
$("#send").click(function () {
$.get("get2.jsp", {
username: encodeURI($("#username").val()),
location: encodeURI($("#location").val()),
contentTxt: encodeURI($("#contentTxt").val())
}, function (data, textStatus) {
alert(textStatus);
var username = data.username;
var location = data.location;
var contentTxt = data.contentTxt;
username = decodeURI(username);
location = decodeURI(location);
contentTxt = decodeURI(contentTxt);
var txtHtml = "<div class='comment'><p><a href='#' class='username'>" + username +
"</a><span class='location'>" + location +
"</span></p><p class='contentTxt'>" + contentTxt + "</p></div>";
$("#resText").html(txtHtml);// 將返回的數(shù)據(jù)添加到頁(yè)面
}, "json");
})
})
</script>
上面encodeURI()是用于編碼赖草,否則中文就無(wú)法解析
json的格式非常嚴(yán)格学少,任何一個(gè)括號(hào)的不匹配或缺失都會(huì)導(dǎo)致頁(yè)面的腳本終止運(yùn)行。

三疚顷、$.post()
$. post( url, [ data ], [ success(data, textStatus, jqXHR) ], [ dataType ] )
除了對(duì)服務(wù)器的狀態(tài)和應(yīng)用的模型數(shù)據(jù)的影響旱易,<nobr aria-hidden="true">.get()和</nobr>
.post()還有以下區(qū)別:
GET請(qǐng)求會(huì)將參數(shù)跟在url后進(jìn)行傳遞禁偎,POST請(qǐng)求則作為HTTP消息的實(shí)體內(nèi)容發(fā)送給Web服務(wù)器。在ajax中這種區(qū)別對(duì)用戶(hù)是不可見(jiàn)的阀坏。
GET對(duì)傳輸?shù)臄?shù)據(jù)大小有限制(通常不大于2kb)如暖,使用POST方式傳遞的數(shù)據(jù)量比GET大得多(理論上不受限制)
GET方式請(qǐng)求的數(shù)據(jù)會(huì)被瀏覽器緩存,這種情況可能帶來(lái)安全問(wèn)題忌堂。
<nobr aria-hidden="true">.get()和</nobr>.post()的結(jié)構(gòu)和使用方式都相同盒至。

四、$.getScript()
$.getScript()用來(lái)加載.js文件士修,與加載一個(gè)HTML片段一樣枷遂,js文件會(huì)自動(dòng)執(zhí)行。
<pre><script type="text/javascript"></pre>
<pre> $(function () {</pre>
<pre> // 點(diǎn)擊按鈕加載js1.js文件</pre>
<pre> $("#send").click(function () {</pre>
<pre> $.getScript("js1.js");</pre>
<pre> })</pre>
<pre> })</pre>
<pre></script></pre>
相當(dāng)于加載并執(zhí)行一段js棋嘲。

五酒唉、.getJSON()
.getJSON()用于加載JSON文件,用法與.getScript()相同沸移。
json數(shù)據(jù):
[
{
"username": "張三",
"location": "[北京市網(wǎng)友]",
"contentTxt": "一樓獻(xiàn)度娘"
},
{
"username": "李四",
"location": "[山東省濟(jì)南市網(wǎng)友]",
"contentTxt": "沒(méi)搶到沙發(fā)"
},
{
"username": "王五",
"location": "[河南省鄭州市網(wǎng)友]",
"contentTxt": "頂頂頂頂頂"
}
]
$(function () {
$("#send").click(function () {
$.getJSON("demo.json", function (data) {
$("#resText").empty();
var html = '';
$.each(data, function (index, comment) {
html += "<div class='comment'><a href='#' class='username'>" + comment['username'] +
"</a><span class='location'>" + comment['location'] +
"</span></p><p class='contentTxt'>" + comment['contentTxt'] + "</p></div>";
});
$("#resText").html(html);
});
})
});

六痪伦、serialize()
使用serialize()方法可以將表單中有name屬性的元素值進(jìn)行序列化,生成標(biāo)準(zhǔn)URL編碼文本字符串雹锣,直接可用于ajax請(qǐng)求网沾,它的調(diào)用格式如下:
$(selector).serialize()
其中selector參數(shù)是一個(gè)或多個(gè)表單中的元素或表單元素本身。

七蕊爵、$.ajax()方法
詳見(jiàn)http://www.w3school.com.cn/jquery/ajax_ajax.asp
$.ajax()是jquery最底層的實(shí)現(xiàn)辉哥。
$.ajax(options)
async類(lèi)型:Boolean默認(rèn)值: true。默認(rèn)設(shè)置下攒射,所有請(qǐng)求均為異步請(qǐng)求醋旦。如果需要發(fā)送同步請(qǐng)求,請(qǐng)將此選項(xiàng)設(shè)置為 false匆篓。
contentType類(lèi)型:String默認(rèn)值: "application/x-www-form-urlencoded"浑度。發(fā)送信息至服務(wù)器時(shí)內(nèi)容編碼類(lèi)型。
默認(rèn)值適合大多數(shù)情況鸦概。如果你明確地傳遞了一個(gè) content-type 給 $.ajax() 那么它必定會(huì)發(fā)送給服務(wù)器(即使沒(méi)有數(shù)據(jù)要發(fā)送)箩张。
context類(lèi)型:Object
這個(gè)對(duì)象用于設(shè)置 Ajax 相關(guān)回調(diào)函數(shù)的上下文。也就是說(shuō)窗市,讓回調(diào)函數(shù)內(nèi) this 指向這個(gè)對(duì)象(如果不設(shè)定這個(gè)參數(shù)先慷,那么 this 就指向調(diào)用本次 AJAX 請(qǐng)求時(shí)傳遞的 options 參數(shù))。比如指定一個(gè) DOM 元素作為 context 參數(shù)咨察,這樣就設(shè)置了 success 回調(diào)函數(shù)的上下文為這個(gè) DOM 元素论熙。
就像這樣:
$.ajax({ url: "test.html", context: document.body, success: function(){
$(this).addClass("done");
}});
data類(lèi)型:String
發(fā)送到服務(wù)器的數(shù)據(jù)。將自動(dòng)轉(zhuǎn)換為請(qǐng)求字符串格式摄狱。GET 請(qǐng)求中將附加在 URL 后脓诡。查看 processData 選項(xiàng)說(shuō)明以禁止此自動(dòng)轉(zhuǎn)換无午。必須為 Key/Value 格式。如果為數(shù)組祝谚,jQuery 將自動(dòng)為不同值對(duì)應(yīng)同一個(gè)名稱(chēng)宪迟。如 {foo:["bar1", "bar2"]} 轉(zhuǎn)換為 '&foo=bar1&foo=bar2'。
dataFilter類(lèi)型:Function
給 Ajax 返回的原始數(shù)據(jù)的進(jìn)行預(yù)處理的函數(shù)交惯。提供 data 和 type 兩個(gè)參數(shù):data 是 Ajax 返回的原始數(shù)據(jù)次泽,type 是調(diào)用 jQuery.ajax 時(shí)提供的 dataType 參數(shù)。函數(shù)返回的值將由 jQuery 進(jìn)一步處理
————————————————————
還有好多呢席爽。
還有jQuery.Form plugin Ajax
ajaxForm
ajaxSubmit
Ajax在MVC中的使用
Ajax.BeginForm
Ajax.ActionLink
jquery.form與jquery.validate結(jié)合使用
參考http://www.jb51.net/article/85694.htm
jQuery AJAX方法 前臺(tái)往后臺(tái)傳數(shù)據(jù)
http://blog.csdn.net/dreamstar613/article/details/61912717
jQuery AJAX 方法 success()后臺(tái)傳來(lái)的4種數(shù)據(jù)
http://blog.csdn.net/dreamstar613/article/details/61913970
前臺(tái)頁(yè)面先對(duì)中文進(jìn)行編碼意荤,如下紅色字體:
https://www.cnblogs.com/dscs/p/5740425.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市只锻,隨后出現(xiàn)的幾起案子玖像,更是在濱河造成了極大的恐慌,老刑警劉巖炬藤,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件御铃,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡沈矿,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)咬腋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)羹膳,“玉大人,你說(shuō)我怎么就攤上這事根竿×晗瘢” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵寇壳,是天一觀(guān)的道長(zhǎng)醒颖。 經(jīng)常有香客問(wèn)我,道長(zhǎng)壳炎,這世上最難降的妖魔是什么泞歉? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮匿辩,結(jié)果婚禮上腰耙,老公的妹妹穿的比我還像新娘。我一直安慰自己铲球,他們只是感情好挺庞,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著稼病,像睡著了一般选侨。 火紅的嫁衣襯著肌膚如雪掖鱼。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,679評(píng)論 1 305
  • 那天援制,我揣著相機(jī)與錄音锨用,去河邊找鬼。 笑死隘谣,一個(gè)胖子當(dāng)著我的面吹牛增拥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播寻歧,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼掌栅,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了码泛?” 一聲冷哼從身側(cè)響起猾封,我...
    開(kāi)封第一講書(shū)人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎噪珊,沒(méi)想到半個(gè)月后晌缘,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡痢站,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年磷箕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阵难。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡岳枷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出呜叫,到底是詐尸還是另有隱情空繁,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布朱庆,位于F島的核電站盛泡,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏娱颊。R本人自食惡果不足惜傲诵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望维蒙。 院中可真熱鬧掰吕,春花似錦、人聲如沸颅痊。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)斑响。三九已至菱属,卻和暖如春钳榨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背纽门。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工薛耻, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赏陵。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓饼齿,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親蝙搔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子缕溉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 原文出處 http://blog.poetries.top/2016/11/26/Ajax-summary 關(guān)注公...
    程序員poetry閱讀 6,692評(píng)論 3 110
  • ajax的優(yōu)勢(shì)和不足 優(yōu)勢(shì): 1.不需要插件支持(一般瀏覽器且默認(rèn)開(kāi)啟JavaScript即可); 2.用戶(hù)體...
    love2013閱讀 531評(píng)論 2 1
  • 1. Ajax 1.1 原生JavaScript封裝Ajax 1.2 jquery ajax 及其 快捷方法 $....
    darr250閱讀 485評(píng)論 0 0
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)吃型,斷路器证鸥,智...
    卡卡羅2017閱讀 134,659評(píng)論 18 139
  • N久以前枉层,從女神那看到這句話(huà)。她讓猜為什么會(huì)寫(xiě)這句赐写,當(dāng)時(shí)對(duì)她還沒(méi)那么著迷鸟蜡,也不太會(huì)猜她心思,就按著印象中書(shū)上學(xué)過(guò)的...
    SLJuner閱讀 499評(píng)論 0 1