js的基礎(chǔ)--ajax

什么是Ajax

不刷新頁面的情況下從服務(wù)器獲取、提交數(shù)據(jù)的一種數(shù)據(jù)交互方式。

Ajax使用步驟

1\創(chuàng)建Ajax對象

var httpRequest = new XMLHttpRequset可以創(chuàng)建一個Ajax請求對象。

注意:瀏覽器的兼容問題

IE6以及之前的IE不支持上邊的創(chuàng)建愛你方法,這些版本的瀏覽器并沒有集成Ajax,而是當(dāng)做一個插件來處理,所以在創(chuàng)建時需要做兼容性處理:

if (window.XMLHttpRequest) {

? ? xmlHttp = new XMLHttpRequest;

} else{

// IE5\6使用的是ActiveXObject對象

xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

}

2\配置Ajax的請求地址

使用Ajax的open方法來配置地址

open方法的三個參數(shù):

數(shù)據(jù)提交方式

地址

是否異步請求

示例xmlHttp.open ("GET", “http://127.0.0.1/index.php”, "true")

數(shù)據(jù)的提交方式分為GET和POST兩種方式

GET:

1. 把提交的數(shù)據(jù)的名稱、對應(yīng)的值使用“?”拼接在url之后,如果有多個數(shù)據(jù),則使用“&”連接

2. 參數(shù)的長度有限制,不能太長(由于各個瀏覽器對長度要求不一樣,所以不詳細(xì)說),否則會被截取

3. 只能傳遞字符串類型的參數(shù)。

POST:

1. 把提交的數(shù)據(jù)封裝在http頭字段中。

2. 參數(shù)長度可以在服務(wù)器端調(diào)整,因此理論上任意長度的參數(shù)都可以傳遞。

3. 可以傳遞任意類型的數(shù)據(jù)

異步與同步:

異步(true):不會阻塞代碼,ajax的工作未完成,繼續(xù)執(zhí)行后邊的代碼

同步(false):阻塞代碼,ajax的工作未完成,則等待ajax完成后在執(zhí)行后邊代碼當(dāng)后續(xù)的代碼需要用到前邊的請求數(shù)據(jù)時,需要用同步,否則用異步請求。

3\發(fā)送請求

xmlHttp對象的send方法發(fā)送上邊的請求: 示例xmlHttp.send()。

4\接收服務(wù)器返回的數(shù)據(jù)

responseText:ajax請求返回的內(nèi)容被存放在這個屬性里

readyState:ajax的工作狀態(tài)

on readystate change:當(dāng)readyState發(fā)生改變時,會觸發(fā)

status:該屬性代表服務(wù)器的工作狀態(tài)(也就是http狀態(tài)碼):200表示請求成功

readyState返回碼含義

存有 XMLHttpRequest 的狀態(tài)。從 0 到 4 發(fā)生變化。

0: 請求未初始化

1: 服務(wù)器連接已建立

2: 請求已接收

3: 請求處理中

4: 請求已完成,且響應(yīng)已就緒

示例1:使用Ajax請求服務(wù)器中的一個新網(wǎng)頁資源

? ? ? ?

? ? ? ? function localXMLDoc () {

? ? ? ? ? ? var xmlHttp;

? ? ? ? ? ? // 1. 創(chuàng)建XMLHttpRequest對象

? ? ? ? ? ? if (window.XMLHttpRequest) {

? ? ? ? ? ? ? ? xmlHttp = new XMLHttpRequest;

} else{

// IE5\6使用的是ActiveXObject對象

xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

}

? ? ? ? ? ? // 2. 每次readyState改變時,都會觸發(fā):onreadystatechange事件

? ? ? ? ? ? xmlHttp.onreadystatechange = function () {

? ? ? ? // readyState返回碼含義

//存有 XMLHttpRequest 的狀態(tài)。從 0 到 4 發(fā)生變化。

//0: 請求未初始化

//1: 服務(wù)器連接已建立

//2: 請求已接收

//3: 請求處理中

//4: 請求已完成,且響應(yīng)已就緒

? ? ? ? ? ? ? ? if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {

? ? ? ? ? ? ? ? ? ? alert(xmlHttp.responseText);

? ? ? ? ? ? ? ? ? ? document.getElementById('div').innerHTML = xmlHttp.responseText;

? ? ? ? ? ? ? ? } else{

//? ? ? ? ? ? ? ? ? ? alert('請求不成功,狀態(tài)'+xmlHttp.status);

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? ? ? // 3. 創(chuàng)建請求事件

? ? ? ? ? ? xmlHttp.open("GET", "http://127.0.0.1/js.html",true);

? ? ? ? ? ? // 4. 發(fā)送請求

? ? ? ? ? ? xmlHttp.send();

? ? ? ? }

點擊加載

? ? ? ?

示例2:使用Ajax請求一個帶參數(shù)的URL

#search ,#hidden{

display: inline-block;

width: 200px;

border: 1px solid black;

}

? ? ? ?

function shoeHint(str) {

var xmlHttp;

// 如果傳入的字符串小于0則直接返回,并清空輸入框

if (str.length == 0) {

document.getElementById('search').innerHTML = "";

return ;

}

? ? ? ? ? ? ? ? // 創(chuàng)建XMLHttpRequest對象

? ? ? ? ? ? ? ? if (window.XMLHttpRequest) {

? ? ? ? ? ? ? ? ? ? xmlHttp = new XMLHttpRequest();

? ? ? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? ? ? xmlHttp = new ActiveXObject('Microsoft.XMLHTTP');

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? xmlHttp.onreadystatechange=function() {

? ? ? ? ? ? ? ? ? ? // 根據(jù)返回碼判斷請求是否成功

? ? ? ? ? ? ? ? if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {

? ? ? ? ? ? ? ? ? ? document.getElementById('hidden').innerHTML = xmlHttp.responseText;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? // 配置請求地址

? ? ? ? ? ? ? ? xmlHttp.open("GET", "https://127.0.0.1/hello.php?q="+str,true);

? ? ? ? ? ? ? ? //開始請求

? ? ? ? ? ? ? ? xmlHttp.send();

? ? ? ? ? ? }

? ? ? ? ? ? document.crea

綜合示例:使用Ajax加載新聞標(biāo)題:

前端代碼

? ? ? ?

function getNews () {

var httpRequest = null;

httpRequest = new XMLHttpRequest();

? ? ? ? ? ? ? ? httpRequest.open("GET", "news.php/",true);

? ? ? ? ? ? ? ? httpRequest.send();

? ? ? ? ? ? ? ? httpRequest.onreadystatechange = function () {

? ? ? ? ? ? ? ? ? ? if (httpRequest.status == 200 && httpRequest.readyState == 4) {

? ? //? ? ? ? ? ? ? ? ? ? ? ? alert(httpRequest.responseText);

? ? ? ? ? ? ? ? ? ? ? ? // 將JSON數(shù)據(jù)轉(zhuǎn)換為普通數(shù)據(jù)

? ? ? ? ? ? ? ? ? ? ? ? ? ? var r = JSON.parse(httpRequest.responseText);

? ? ? ? ? ? ? ? ? ? ? ? ? ? //? ? ? ? ? ? ? ? ? ? ? ? ? ? console.log(r[0].title);

? ? ? ? ? ? ? ? ? ? ? ? var hml = '';

? ? ? ? ? ? ? ? ? ? ? ? for (var i = 0; i < r.length; i++) {

? ? ? ? ? ? ? ? ? ? ? ? ? ? // 拼接無序列表

? ? ? ? ? ? ? ? ? ? ? ? ? ? hml += "

  • "+"" +r[i].title+""+"
  • ";

    }

    document.getElementById('newsUl').innerHTML = hml;

    }

    }

    }

    ? ? ? ? 獲取新聞

    ? ? ? ?

    服務(wù)端代碼

    ? ? $news = array(

    ? ? ? ? array('title' => '樓繼偉財長:簡單提高個稅起征點不公平'),

    ? ? ? ? array('title' => '[銀行]回應(yīng)國有銀行經(jīng)營持續(xù)惡化:不良貸款率的確在溫和上升 今后還會上漲'),

    ? ? ? ? array('title' => '[改革]稱財稅改革進(jìn)度低于預(yù)期 營增改今年完成 難點在于納稅人多比較復(fù)雜'),

    ? ? ? ? array('title' => '[債務(wù)]回應(yīng)地方債增速加大:赤字率可適當(dāng)提高 稱借錢可買房 不能用于吃飯'),

    ? ? ? ? array('title' => '[相關(guān)]個人綜合稅方案已經(jīng)提交 談"勞動合同法保護(hù)企業(yè)不足":財政部不修法'),

    ? ? );

    ? ? echo json_encode($news);

    ?>

    GET請求注意問題!!:

    Ajax的緩存問題:如果反復(fù)請求同一個URL,則第二次請求的內(nèi)容是從瀏覽器緩存中拿到的,并不是真正服務(wù)器端的內(nèi)容,所以為了避免服務(wù)器內(nèi)容更改,但是客戶端從緩存中取數(shù)據(jù),拿不到新數(shù)據(jù),我們可以在get請求中的參數(shù)末端添加一個隨機數(shù)、或時間戳作為參數(shù):'http://127.0.0.1?username=zhangsan&password=12345&'+ new Date()

    Ajax的亂碼問題:如果請求參數(shù)中有中文,則會因為編碼不統(tǒng)一導(dǎo)致后臺認(rèn)不出中文參數(shù)的情況,所以我們需要把中文參數(shù)進(jìn)行編碼:'http://127.0.0.1?username='+encodeURI('全政')+'&password=123456&'+ new Date()

    POST請求注意問題!!

    POST請求的參數(shù)不是拼接在url之后,而是放在send()方法里:send('username=zhangsan&password=12345&'+ new Date()')

    請求編碼問題:form表單提交時,默認(rèn)的編碼是:enctype="application/x-www-form-urlencoded" 而Ajax請求需要手動設(shè)置編碼方式,在setRequestHeader('content-type', 'pplication/x-www-form-urlencoded')設(shè)置。

    form提交數(shù)據(jù)示例:

    ? ? ? ?

    ? ?

    ? ?

    ? ?

    ? ?

    最后編輯于
    ?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
    平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
    • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
      沈念sama閱讀 228,505評論 6 533
    • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
      沈念sama閱讀 98,556評論 3 418
    • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
      開封第一講書人閱讀 176,463評論 0 376
    • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
      開封第一講書人閱讀 63,009評論 1 312
    • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
      茶點故事閱讀 71,778評論 6 410
    • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
      開封第一講書人閱讀 55,218評論 1 324
    • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
      沈念sama閱讀 43,281評論 3 441
    • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
      開封第一講書人閱讀 42,436評論 0 288
    • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
      沈念sama閱讀 48,969評論 1 335
    • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
      茶點故事閱讀 40,795評論 3 354
    • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
      茶點故事閱讀 42,993評論 1 369
    • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
      沈念sama閱讀 38,537評論 5 359
    • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
      茶點故事閱讀 44,229評論 3 347
    • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
      開封第一講書人閱讀 34,659評論 0 26
    • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
      開封第一講書人閱讀 35,917評論 1 286
    • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
      沈念sama閱讀 51,687評論 3 392
    • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
      茶點故事閱讀 47,990評論 2 374

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

    • 什么是AJAX? AJAX的意思就是異步的JavaScript和XML。簡而言之,它是使用XMLHttpReque...
      默默先生Alec閱讀 422評論 0 0
    • AJAX 原生js操作ajax 1.創(chuàng)建XMLHttpRequest對象 var xhr = new XMLHtt...
      碧玉含香閱讀 3,246評論 0 7
    • 一、什么是AJAX? AJAX的意思就是異步的JavaScript和XML。簡而言之,它是使用XMLHttpRe...
      彈鋼琴的安徒生閱讀 160評論 0 0
    • 要完整實現(xiàn)一個AJAX異步調(diào)用和局部刷新,通常需要以下幾個步驟: (1)創(chuàng)建XMLHttpRequest對象,也就...
      親愛的翔子閱讀 498評論 0 0
    • 我們常常痛感生活的離別,無數(shù)次目睹了生命在各種情景下離別的無奈與痛苦,“陪伴”一時間成了人們最真切的渴望。但是,我...
      風(fēng)shuo閱讀 396評論 3 3