ajax2019-04-23

Ajax這種技術(shù)能夠向服務(wù)器請(qǐng)求額外的數(shù)據(jù)而無須卸載頁面(即刷新)

一.實(shí)現(xiàn)同步流程:

1馍惹、得到核心對(duì)象XMLHttpRequest對(duì)象

var xhr = new XMLHttpRequest();

2怒竿、準(zhǔn)備/打開請(qǐng)求

open(請(qǐng)求類型GET/POST,請(qǐng)求的路徑,是否異步true/false);

3、發(fā)送請(qǐng)求

send(參數(shù)/null);

注:如果是get請(qǐng)求最楷,參數(shù)直接跟在請(qǐng)求路徑后面,send()方法中設(shè)置null;

如果是post請(qǐng)求,有參數(shù)則設(shè)置參數(shù)乡恕,無參數(shù)設(shè)置為null;

4、解析響應(yīng)數(shù)據(jù)

1俯萎、判斷響應(yīng)是否成功 status=200 (404=未找到資源;500=服務(wù)器異常;200=成功)

2傲宜、得到后臺(tái)響應(yīng)數(shù)據(jù)? responseText

例子:

<script type="text/javascript">

1、得到核心對(duì)象XMLHttpRequest對(duì)象

var xhr = new XMLHttpRequest();

console.log(xhr);

?2夫啊、準(zhǔn)備/打開請(qǐng)求? open(請(qǐng)求類型GET/POST,請(qǐng)求的路徑,是否異步true/false);

xhr.open("GET","js/data.json?uname=zhangsan&uage=10",false); // 同步請(qǐng)求

?3函卒、發(fā)送請(qǐng)求? send(參數(shù)/null);

xhr.send(null);

?4、解析響應(yīng)數(shù)據(jù)

if (xhr.status == 200) { // 1撇眯、判斷響應(yīng)是否成功 status=200

2报嵌、得到后臺(tái)響應(yīng)數(shù)據(jù)? responseText

console.log(xhr.responseText);

var user = JSON.parse(xhr.responseText);

console.log(user);

console.log(user.uname);

} else {

alert("失敗狀態(tài)碼:" + xhr.status + ",失敗原因:" + xhr.statusText);

}

</script>

二.實(shí)現(xiàn)異步流程:

1.得到核心對(duì)象XMLHttpRequest對(duì)象

var xhr = new XMLHttpRequest();

2.準(zhǔn)備/打開請(qǐng)求

open(請(qǐng)求類型get/post,請(qǐng)求的路徑熊榛,是否異步true/false);

3.發(fā)送請(qǐng)求

send(參數(shù)/null);

注:如果是get請(qǐng)求 锚国,參數(shù)直接跟在請(qǐng)求路徑后面,send()方法中設(shè)置null玄坦;

? ? ? ? 如果是post請(qǐng)求血筑,有參數(shù)則設(shè)置參數(shù)绘沉,無參數(shù)設(shè)置為null;

4.解析響應(yīng)數(shù)據(jù):

? ? ? ? 1.判斷響應(yīng)是否成功? status=200? (404=未找到資源豺总;500=服務(wù)器異常车伞;200=成功連接)

? ? ? ? 2.得到后響應(yīng)數(shù)據(jù)? responseText

例子:

<script type="text/javascript">

1.得到核心對(duì)象XMLHttpRequest對(duì)象

var xhr = new XMLHttpRequest();

console.log(xhr);

2.準(zhǔn)備/打開請(qǐng)求 open(請(qǐng)求類型Get/post,請(qǐng)求的路徑,是否異步true/false);

xhr.open("GET","js/data.json?uname=zhangsan$uage=10",true);//異步請(qǐng)求

3.發(fā)送請(qǐng)求? send(參數(shù)/null)喻喳;

shr.send(null);

//監(jiān)聽readystate事件? (0=尚未調(diào)用open·方法另玖; 1=已調(diào)用open方法未調(diào)用send方法,2=調(diào)用send方法沸枯,未接收到響應(yīng)日矫;3=接收到部分響應(yīng);4=響應(yīng)完全接收)

xhr.onreadystatechange = function() {

//如果是異步請(qǐng)求绑榴,需要等待數(shù)據(jù)完全響應(yīng)再做處理

if(xhr.readyState == 4){

4.解析響應(yīng)數(shù)據(jù)? responseText

console.log(xhr.responseText);

var user = JSON.parse(xhr.responseText);

console.log(user);

console.log(user.uname);

}? else{

? ? ? console.log("失敗狀態(tài)碼:" + xhr.status + "哪轿,失敗原因:" + xhr.statusText);

????????????????}

? ? ? ? }

}

</script>

三.post請(qǐng)求

實(shí)現(xiàn)流程:

異步:

1、得到核心對(duì)象XMLHttpRequest對(duì)象

var xhr = new XMLHttpRequest();

2翔怎、準(zhǔn)備/打開請(qǐng)求

open(請(qǐng)求類型GET/POST,請(qǐng)求的路徑,是否異步true/false);

3窃诉、發(fā)送請(qǐng)求

send(參數(shù)/null);

注:如果是get請(qǐng)求,參數(shù)直接跟在請(qǐng)求路徑后面赤套,send()方法中設(shè)置null;

如果是post請(qǐng)求飘痛,有參數(shù)則設(shè)置參數(shù),無參數(shù)設(shè)置為null;

4容握、解析響應(yīng)數(shù)據(jù)

1宣脉、判斷響應(yīng)是否成功 status=200 (404=未找到資源;500=服務(wù)器異常;200=成功)

2、得到后臺(tái)響應(yīng)數(shù)據(jù)? responseText

例子:

<script type="text/javascript">

?1剔氏、得到核心對(duì)象XMLHttpRequest對(duì)象

var xhr = new XMLHttpRequest();

console.log(xhr);

?2塑猖、準(zhǔn)備/打開請(qǐng)求? open(請(qǐng)求類型GET/POST,請(qǐng)求的路徑,是否異步true/false);

xhr.open("POST","js/data.json",true); // 異步請(qǐng)求

?由于Post請(qǐng)求的機(jī)制問題,需要模擬表單提交

xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');

?3谈跛、發(fā)送請(qǐng)求? send(參數(shù)/null);

xhr.send("uname=zhangsan&uage=10"); // post請(qǐng)求如果有參數(shù)羊苟,需要將參數(shù)設(shè)置在send方法中

監(jiān)聽readystate事件 (0=尚未調(diào)用open方法;1=已調(diào)用open方法未調(diào)用send方法感憾,2=調(diào)用send方法蜡励,未接收到響應(yīng);3=接收到部分響應(yīng)阻桅;4=響應(yīng)完全接收)

xhr.onreadystatechange = function() {

?如果是異步請(qǐng)求凉倚,需要等待數(shù)據(jù)完全響應(yīng)后再做處理

if (xhr.readyState == 4) {

?4、解析響應(yīng)數(shù)據(jù)

if (xhr.status == 200) { // 1嫂沉、判斷響應(yīng)是否成功 status=200

?2稽寒、得到后臺(tái)響應(yīng)數(shù)據(jù)? responseText

console.log(xhr.responseText);

var user = JSON.parse(xhr.responseText);

console.log(user);

console.log(user.uname);

} else {

console.log("失敗狀態(tài)碼:" + xhr.status + ",失敗原因:" + xhr.statusText);

}

}

}

</script>

四.封裝

實(shí)現(xiàn)流程:同異步流程

例子:

<script type="text/javascript">

var obj = {

method:"GET",

url:"js/data.json?aa=11",

async:true,

data:{

uname:"zhangsan",

uage:18

},

success:function(data){

// 做想處理的事情

console.log(data);

}

};

function ajax(obj) {

// 1输瓜、得到核心對(duì)象XMLHttpRequest對(duì)象

var xhr = new XMLHttpRequest();

var params = formatParam(obj.data);

// 判斷是否是get請(qǐng)求,如果是則將參數(shù)拼接在url后面

if ("GET" == (obj.method).toUpperCase()) {

obj.url += (obj.url).indexOf("?") > 0 ? "&" +params : "?" + params;

}

// 2、準(zhǔn)備/打開請(qǐng)求? open(請(qǐng)求類型GET/POST,請(qǐng)求的路徑,是否異步true/false);

xhr.open(obj.method,obj.url,obj.async);

// 判斷如果是POST請(qǐng)求

if ("POST" == (obj.method).toUpperCase()) {

// 由于Post請(qǐng)求的機(jī)制問題尤揣,需要模擬表單提交

xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');

// 3搔啊、發(fā)送請(qǐng)求? send(參數(shù)/null);

xhr.send(params); // post請(qǐng)求如果有參數(shù),需要將參數(shù)設(shè)置在send方法中

} else {

xhr.send(null); // get請(qǐng)求設(shè)置為null

}

// 判斷是同步請(qǐng)求還是異步請(qǐng)求

if (obj.async)? { // 異步請(qǐng)求

// 監(jiān)聽readystate事件 (0=尚未調(diào)用open方法北戏;1=已調(diào)用open方法未調(diào)用send方法负芋,2=調(diào)用send方法,未接收到響應(yīng)嗜愈;3=接收到部分響應(yīng)旧蛾;4=響應(yīng)完全接收)

xhr.onreadystatechange = function() {

// 如果是異步請(qǐng)求,需要等待數(shù)據(jù)完全響應(yīng)后再做處理

if (xhr.readyState == 4) {

// 處理響應(yīng)結(jié)果

callback();

}

}

} else { // 同步請(qǐng)求

// 處理響應(yīng)結(jié)果

callback();

}

// 處理響應(yīng)結(jié)果

function callback() {

// 4蠕嫁、解析響應(yīng)數(shù)據(jù)

if (xhr.status == 200) { // 1锨天、判斷響應(yīng)是否成功 status=200

// 2、得到后臺(tái)響應(yīng)數(shù)據(jù)? responseText

/* console.log(xhr.responseText);

var user = JSON.parse(xhr.responseText);

console.log(user); */

obj.success(xhr.responseText);

} else {

console.log("失敗狀態(tài)碼:" + xhr.status + "剃毒,失敗原因:" + xhr.statusText);

}

}

}

// formatParam({ uname:"zhangsan", uage:18 });

/*將對(duì)象格式的參數(shù)轉(zhuǎn)換成等號(hào)拼接的字符串*/

function formatParam(data) {

// 判斷參數(shù)是否存在

if (data == null) {

return "";

}

// 定義數(shù)組病袄,接收每個(gè)參數(shù)字符串

var params = [];

for(var key in data) {

// js中通過push()方法向數(shù)組的最后追加

params.push(key+"="+data[key]);

}

console.log(params.join("&"));

var param = params.join("&");// uname=zhangsan&uage=18

return param;

}

五jquery調(diào)用ajax方法


1.ajax。html

格式:$.ajax({});

參數(shù):

type:請(qǐng)求方式GET/POST

url:請(qǐng)求地址url

async:是否異步赘阀,默認(rèn)是true表示異步

data:發(fā)送到服務(wù)器的數(shù)據(jù)

dataType:預(yù)期服務(wù)器返回的數(shù)據(jù)類型

contentType:設(shè)置請(qǐng)求頭

success:請(qǐng)求成功時(shí)調(diào)用此函數(shù)

error:請(qǐng)求失敗時(shí)調(diào)用此函數(shù)

例子:

$.ajax({

type:"get", // 請(qǐng)求類型 GET/POST

url:"js/data.json", // 請(qǐng)求路徑

dataType:"json", // 預(yù)期服務(wù)器返回的數(shù)據(jù)類型

data:{ // 請(qǐng)求參數(shù)益缠,鍵值對(duì)的json對(duì)象

},

success:function(data){ // 請(qǐng)求成功時(shí)的回調(diào)函數(shù)

console.log(data);

}

});

post類型只需要將get改成post就可以了

2.get.html

1.請(qǐng)求get文件,忽略返回值

$.get('../js/cuisine_area.json');

2.請(qǐng)求get文件基公,傳遞參數(shù)幅慌,忽略返回值

$.get('../js/cuisine_area.json',{name:"tom",age:100});

3.請(qǐng)求get文件,拿到返回值,請(qǐng)求成功后可拿到返回值

$.get('../js/cuisine_area.json',function(data){

console.log(data)

});

4.請(qǐng)求get文件,傳遞參數(shù),拿到返回值

$.get('../js/cuisine_area.json',{name:"tom",age:100},function(data){

console.log(data)

例子:


/* 無參數(shù),無返回值 */

// $.get("http://localhost:8080/jqueryAjax/ServletTest");

/* 有參數(shù)轰豆,無返回值 */

// $.get("http://localhost:8080/jqueryAjax/ServletTest",{uname:"zhangsan"});

/* 無參數(shù)胰伍,有返回值 */

/* $.get("http://localhost:8080/jqueryAjax/ServletTest",function(data){

console.log(data);

}); */

/* 有參數(shù),有返回值 */

/* $.get("http://localhost:8080/jqueryAjax/ServletTest",{uname:"zhangsan"},function(data){

console.log(data);

}); */

post.html同上就是將get改成post

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末秒咨,一起剝皮案震驚了整個(gè)濱河市喇辽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌雨席,老刑警劉巖菩咨,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異陡厘,居然都是意外死亡抽米,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門糙置,熙熙樓的掌柜王于貴愁眉苦臉地迎上來云茸,“玉大人,你說我怎么就攤上這事谤饭”贽啵” “怎么了懊纳?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長亡容。 經(jīng)常有香客問我嗤疯,道長,這世上最難降的妖魔是什么闺兢? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任茂缚,我火速辦了婚禮,結(jié)果婚禮上屋谭,老公的妹妹穿的比我還像新娘脚囊。我一直安慰自己,他們只是感情好桐磁,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布悔耘。 她就那樣靜靜地躺著,像睡著了一般所意。 火紅的嫁衣襯著肌膚如雪淮逊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天扶踊,我揣著相機(jī)與錄音泄鹏,去河邊找鬼。 笑死秧耗,一個(gè)胖子當(dāng)著我的面吹牛备籽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播分井,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼车猬,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了尺锚?” 一聲冷哼從身側(cè)響起珠闰,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瘫辩,沒想到半個(gè)月后伏嗜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡伐厌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年承绸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挣轨。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡军熏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出卷扮,到底是詐尸還是另有隱情荡澎,我是刑警寧澤均践,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站摩幔,受9級(jí)特大地震影響浊猾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜热鞍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望衔彻。 院中可真熱鬧薇宠,春花似錦、人聲如沸艰额。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽柄沮。三九已至回梧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間祖搓,已是汗流浹背狱意。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拯欧,地道東北人详囤。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像镐作,于是被迫代替她去往敵國和親藏姐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

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

  • AJAX 原生js操作ajax 1.創(chuàng)建XMLHttpRequest對(duì)象 var xhr = new XMLHtt...
    碧玉含香閱讀 3,173評(píng)論 0 7
  • # Ajax標(biāo)簽(空格分隔): 筆記整理---[TOC]### 從輸入網(wǎng)址開始:- 在學(xué)習(xí)ajax之前该贾,你應(yīng)該先了...
    V8閱讀 253評(píng)論 1 0
  • Ajax和XMLHttpRequest 我們通常將Ajax等同于XMLHttpRequest羔杨,但細(xì)究起來它們兩個(gè)是...
    changxiaonan閱讀 2,223評(píng)論 0 2
  • ajax作為前端開發(fā)必需的基礎(chǔ)能力之一,你可能會(huì)使用它杨蛋,但并不一定懂得其原理兜材,以及更深入的服務(wù)器通信相關(guān)的知識(shí)。在...
    蕭玄辭閱讀 812評(píng)論 0 0
  • ??2005 年,Jesse James Garrett 發(fā)表了一篇在線文章掏击,題為“Ajax: A new App...
    霜天曉閱讀 883評(píng)論 0 1