中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

AJAX機(jī)制詳解以及跨域通信
來(lái)源:易賢網(wǎng) 閱讀:1727 次 日期:2015-04-29 15:13:36
溫馨提示:易賢網(wǎng)小編為您整理了“AJAX機(jī)制詳解以及跨域通信”,方便廣大網(wǎng)友查閱!

1.Ajax

1.1.Ajax簡(jiǎn)介

Ajax簡(jiǎn)介這一部分我們主要是談一下ajax的起源,ajax是什么?因?yàn)檫@些是跟技術(shù)無(wú)關(guān)的。所以,大多細(xì)節(jié)都是一筆帶過(guò)。

Ajax的起源?

Ajax一詞源于2005年 Jesse James Garrett發(fā)表的一篇題為"Ajax:A new Approach to Web Applications".他在這篇文 章中介紹了一種新技術(shù),用他的話說(shuō),就是Ajax :Asynchronous JavaScript +XML的縮寫。

Ajax是什么?

這種新技術(shù)的主要目的就是為了使前端網(wǎng)頁(yè)能夠向服務(wù)器請(qǐng)求額外的數(shù)據(jù)而不需要卸載頁(yè)面。自從這種技術(shù)出現(xiàn)以后,微軟率先引入XHRt對(duì)象(ajax能夠?qū)崿F(xiàn)的核心對(duì)象),然后其他瀏覽器相繼實(shí)現(xiàn)這種技術(shù)。總而言之,ajax就是一種能異步通信的技術(shù)。

1.2.Ajax的核心對(duì)象---XMLHttpRequest

因?yàn)镮E5是最先引入這個(gè)XHR對(duì)象的,當(dāng)時(shí)并沒(méi)有事實(shí)上的標(biāo)準(zhǔn)。在IE中有三種不同的XHR對(duì)象版本:MSXML2.XMLHttp,MSXML2.XMLHttp.3.0和MSXML2.XMLHttp.6.0;

根據(jù)這三種版本號(hào),在IE中創(chuàng)建一個(gè)XHR對(duì)象如下:

function createXHR() { //IE7之前的版本通過(guò)這種方式

var versions = [

'MSXML2.XMLHttp',

'MSXML2.XMLHttp.3.0',

'MSXML2.XMLHttp.6.0'

];

var xhr = null;

for (var item in versions) {

try {

xhr = new ActiveXObject(item); //若不存在該版本,可能會(huì)出錯(cuò)

if (xhr) break;

} catch (e) {

//一般對(duì)這種錯(cuò)誤不做處理

}

}

return xhr;

}

在IE引入這個(gè)對(duì)象之后,其他瀏覽器廠商也相繼跟隨,這時(shí)候XHR對(duì)象成為事實(shí)上的標(biāo)準(zhǔn)!

跨瀏覽器創(chuàng)建XHR對(duì)象;

function createXHttpRequest() {

if (typeof XMLHttpRequest !== 'undefined') { //不要用 if(XMLHttpRequest){}這種形式,

return new XMLHttpRequest(); //如果是這種形式在找不到XMLHttpRequest函數(shù)的情況下,會(huì)報(bào)錯(cuò)。

} else if (typeof ActiveXObject !== 'undefined') {

return createXHR(); //用到剛才我們創(chuàng)建的函數(shù)

} else { throw new Error('不能創(chuàng)建XMLHttpRequest對(duì)象'); } }

1.2.XMLHttpRequest的用法

XMLHttpRequest對(duì)象的函數(shù)有6個(gè):

?1234567891011121314151617181920212223242526272829 open("method",url,boolean); //該方法的三個(gè)參數(shù),分別為----提交方式"get"或者"post"等   //&& url是相對(duì)于執(zhí)行代碼的當(dāng)前頁(yè)面的路徑(使用絕對(duì)路徑是允許的)&&是否異步 send(); //這個(gè)方法接收一個(gè)參數(shù),這個(gè)參數(shù)是作為請(qǐng)求主體發(fā)送的數(shù)據(jù), //說(shuō)明: 如果有參數(shù),請(qǐng)使用post方式提交 使用方式如下,send("user="+username+"&pwd="+password); //如果沒(méi)有參數(shù),為了兼容性考慮,必須在參數(shù)中傳入null,即send(null);該方式使用get方式提交 abort(); //取消當(dāng)前響應(yīng),關(guān)閉連接并且結(jié)束任何未決的網(wǎng)絡(luò)活動(dòng)。 //這個(gè)方法把 XMLHttpRequest 對(duì)象重置為 readyState 為 0 的狀態(tài),并且取消所有未決 //的網(wǎng)絡(luò)活動(dòng)。例如,如果請(qǐng)求用了太長(zhǎng)時(shí)間,而且響應(yīng)不再必要的時(shí)候,可以調(diào)用這個(gè)方法。 getResponseHeader() //返回指定的 HTTP 響應(yīng)頭部的值。其參數(shù)是要返回的 HTTP 響應(yīng)頭部的名稱。可以使用任 //何大小寫來(lái)制定這個(gè)頭部名字,和響應(yīng)頭部的比較是不區(qū)分大小寫的。 //該方法的返回值是指定的 HTTP 響應(yīng)頭部的值,如果沒(méi)有接收到這個(gè)頭部或者 readyStat //e 小于 3 則為空字符串。如果接收到多個(gè)有指定名稱的頭部,這個(gè)頭部的值被連接起來(lái)并 //返回,使用逗號(hào)和空格分隔開(kāi)各個(gè)頭部的值。 getAllResponseHeaders() //把 HTTP 響應(yīng)頭部作為未解析的字符串返回。 //如果 readyState 小于 3,這個(gè)方法返回 null。否則,它返回服務(wù)器發(fā)送的所有 HTTP 響應(yīng)的 //頭部。頭部作為單個(gè)的字符串返回,一行一個(gè)頭部。每行用換行符 "\r\n" 隔開(kāi)。 setRequestHeader() //向一個(gè)打開(kāi)但未發(fā)送的請(qǐng)求設(shè)置或添加一個(gè) HTTP 請(qǐng)求。

XMLHttpRequest對(duì)象的屬性有5個(gè):

屬性 描述

responseText 作為響應(yīng)主題被返回的文本

responseXML 如果相響應(yīng)的是text/html或者application/xml類型的話,這個(gè)屬性將保存著響應(yīng)的XML文檔

status http的響應(yīng)狀態(tài)碼

statusText http狀態(tài)的說(shuō)明

readyState XMLHttpRequest對(duì)象的狀態(tài)位 0 1 2 3 4 分別表示5種狀態(tài)

timeout 設(shè)置超時(shí)時(shí)間,單位是ms.目前只有IE8+支持---尚未標(biāo)準(zhǔn)化(不推薦使用)

XMLHttpRequest對(duì)象的事件屬性onReadyStateChange:-----所有瀏覽器兼容

該屬性監(jiān)聽(tīng)的是 XMLHttpRequest對(duì)象的readyState屬性的變化:

readyState的變化分別對(duì)應(yīng)如下?tīng)顟B(tài):

0:尚未初始化。未調(diào)用open()之前

1:?jiǎn)?dòng)。調(diào)用open()之后,但是未調(diào)用send();

2:發(fā)送。調(diào)用send()但是尚未得到響應(yīng)。

3:正在接收數(shù)據(jù)。剛接收到響應(yīng)數(shù)據(jù)開(kāi)始到接收完成之前。

4: 完成。數(shù)據(jù)接收完成。

?12345678910 xhr.onreadystatechange = function () { if (xhr.readyState == 4) { if (xhr.status >= 200 && xhr.status <== 300 || xhr.status == 304) { alert(xhr.responseText); //處理接收的數(shù)據(jù) } else { //請(qǐng)求失敗,未得到響應(yīng)數(shù)據(jù) } } }; //補(bǔ)充說(shuō)明:注冊(cè)事件必須發(fā)生在send()以前

XMLHttpRequest對(duì)象的事件屬性ontimeout -----僅限IE8+,不過(guò)最新的主流高版本瀏覽器也已經(jīng)實(shí)現(xiàn)(不推薦使用)

xhr.timeout=1000;//一秒鐘

xhr.ontimeout=functon(){

//處理代碼

......

}

這種使用方式有個(gè)問(wèn)題需要注意,就是在超時(shí)之后,在接收到數(shù)據(jù)后仍然會(huì)觸發(fā)onreadystatechange事件,如果在處理onreadychange事件時(shí)訪問(wèn)xhr.status屬性,會(huì)出錯(cuò)。所以我們?cè)谠L問(wèn)該屬性時(shí)需要做一下try{}catch處理。但是,因?yàn)檫@個(gè)屬性暫不兼容,所有我們就不重點(diǎn)講了。

XMLHttpRequest對(duì)象的事件屬性onload onerror onloadstar onbort onprogress:

-----非IE瀏覽器和IE 10+已實(shí)現(xiàn)

onload在IE8以上可以實(shí)現(xiàn),大部分事件根據(jù)readySate變化均可以實(shí)現(xiàn),以上事件只不過(guò)是方便使用而已。

onload和onprogress 這兩種事件分別對(duì)應(yīng)著readyState=4和readyState=3的情況,使用方式分別如下:

?12345678 xhr.onload= function (event) { //event只包含一個(gè)屬性 event.target=xhr;使用方式只是在readyState=4時(shí)差不多.. } xhr.onprogress=function(event){ //event除了包含event.target=xhr之外,還包含三種屬性 //lengthComputale(進(jìn)度信息是否可用),position(已接受字節(jié)數(shù))和totalSize(總字節(jié)數(shù)). }

補(bǔ)充:有些事件均可以根據(jù)readyState的狀態(tài)進(jìn)行模擬。只有有的瀏覽器進(jìn)行了方便化處理而已。

3.單向跨域技術(shù) ---CORS

今天我們這里講的是客戶端網(wǎng)頁(yè)向不在同一個(gè)域的服務(wù)器請(qǐng)求數(shù)據(jù)..客戶端在收到返回的數(shù)據(jù)時(shí)時(shí),用回調(diào)函數(shù)處理數(shù)據(jù)。

即:

1. 客戶端向域外服務(wù)器請(qǐng)求數(shù)據(jù)

2.服務(wù)器得到響應(yīng)后向客戶端發(fā)送數(shù)據(jù)。

3.客戶端根據(jù)返回的數(shù)據(jù)執(zhí)行回調(diào)函數(shù).

我知道不同域下的iframe也可以進(jìn)行通信,而且這也是一種跨域通信技術(shù)。但是,這種iframe頁(yè)面之間的雙向通信,我們?cè)谙乱粋€(gè)專題里面講解,今天主要講的是單向通信。

3.1.CORS跨域請(qǐng)求的原理

在用xhr(XMLHttpRequest)對(duì)象或者xdr(XDomainRequest)對(duì)象,發(fā)送域外請(qǐng)求時(shí),大概的實(shí)現(xiàn)原理如下圖:

3.2.IE中CORS技術(shù)的實(shí)現(xiàn)

IE8引入了一個(gè)XDR類型,這個(gè)類型與XHR基本類似,但是其能實(shí)現(xiàn)安全可靠地跨域通信。

XHD的特點(diǎn):

1.cookie不會(huì)隨請(qǐng)求發(fā)送,也不會(huì)隨響應(yīng)返回。

2.只能設(shè)置請(qǐng)求頭部中的Content-Type片段。

3.不能訪問(wèn)響應(yīng)頭部信息。

4.只是支持get和post請(qǐng)求。

XDR支持onload和onerror事件屬性,且其使用方式和XHR基本一致,不過(guò)其open()只接收兩個(gè)參數(shù),默認(rèn)是異步的。

?123456789 var xdr = new XDomainRequest(); xdr.onload = function () { //處理xdr.responseText } xdr.onerror = function () { }; xdr.open('get', '絕對(duì)url'); xhr.send(null);

3.3.跨瀏覽器的CORS技術(shù)實(shí)現(xiàn)

在標(biāo)準(zhǔn)瀏覽器中XHR對(duì)象就已經(jīng)可以自動(dòng)實(shí)現(xiàn)跨域請(qǐng)求,但是XHR和XDR的不同之處:

1.XHR可以在設(shè)置 withCredentials =true時(shí),瀏覽器會(huì)把cookie發(fā)送給服務(wù)器,服務(wù)器此時(shí)通過(guò)設(shè)置頭部Access-Control-Allow-Credentials:true時(shí)來(lái)響應(yīng)。如果,服務(wù)器不設(shè)置這個(gè)屬性,則瀏覽器會(huì)觸發(fā)onerror事件。

2.在回調(diào)函數(shù)中可以訪問(wèn)status和statusText屬性,而且支持同步請(qǐng)求。

以下是實(shí)現(xiàn)跨域請(qǐng)求的代碼:

?1234567891011121314151617 function createCrosRequest(method, url) { var xhr = new XMLHttpRequest(); //IE7+ if ('withCredentials' in xhr) { //IE8-IE9瀏覽器沒(méi)有這個(gè)屬性 xhr.open(method, url, true); } else if (typeof XDomainRequest != 'undefined') { xhr = new XDomainRequest(); //IE xhr.open(method, url) } return xhr; } var request=CreateCrosRequest("get","url"); if(request){ request.onload=function(){ //處理request.responseText; } request.send(null); }

4.單向跨域技術(shù) ---JSONP技術(shù)

JSONP技術(shù)比較簡(jiǎn)單,其主要原理主要是利用script標(biāo)簽的特性。

script標(biāo)簽和image標(biāo)簽一樣,它們都具有src屬性,而且這個(gè)屬性是可跨域的。

因?yàn)閟cript標(biāo)簽返回的都是js代碼,且該js代碼會(huì)自動(dòng)執(zhí)行。所以,如果我們請(qǐng)求返回的數(shù)據(jù)也是類似一段js代碼的形式,豈不是就可以實(shí)現(xiàn)在腳本加載完畢后自動(dòng)執(zhí)行。

如果我們的請(qǐng)求,返回的數(shù)據(jù)是 callback + '(' + json + ')'; 這種形式的數(shù)據(jù), 那么在腳本加載完畢之后也就能自動(dòng)執(zhí)行callback()函數(shù)了.

4.1.客戶端寫法

?123456789101112131415161718192021222324 <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> </head> <body> <button id="button">請(qǐng)求數(shù)據(jù)</button> </body> <script> window.onload=function(){ var button=document.getElementById("ibutton"); function callback(data){ //處理data } button.onclick=function(){ var script=document.createElement("script"); script=""; document.body.insertBefore(script,document.body.firstChild);//加載腳本 } } </script> </html>

1.客戶端將回調(diào)函數(shù)名寫入<Script>腳本的url參數(shù)中。

2.script加載的時(shí)候會(huì)發(fā)送跨域請(qǐng)求。

4.2.服務(wù)器端

1.通過(guò)url得到函數(shù)名,命名為callback

2.將請(qǐng)求的數(shù)據(jù)作為函數(shù)的參數(shù)格式轉(zhuǎn)化json格式,命名為。

3.將返回結(jié)果拼接為 callback+"("+json+")"; --------返回的就是填充式的數(shù)據(jù),這段數(shù)據(jù)在腳本中會(huì)自動(dòng)執(zhí)行。

4.返回?cái)?shù)據(jù).

4.3.JSONP技術(shù)的缺點(diǎn)

1.因?yàn)槭峭ㄟ^(guò)url傳參數(shù),所以請(qǐng)求只能是get類型的。

2.<script>目前只有onload屬性事件,onerror還沒(méi)有統(tǒng)一化,如果加載腳本出錯(cuò),客戶端很難得到反饋。

3.所請(qǐng)求數(shù)據(jù)的站點(diǎn)必須是可信任的,如果返回的數(shù)據(jù)段中注入的有惡意的代碼,危害較大,且難以發(fā)現(xiàn)。

以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。

更多信息請(qǐng)查看IT技術(shù)專欄

更多信息請(qǐng)查看腳本欄目
易賢網(wǎng)手機(jī)網(wǎng)站地址:AJAX機(jī)制詳解以及跨域通信
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2026上岸·考公考編培訓(xùn)報(bào)班

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
亚洲午夜国产成人av电影男同| 欧美视频在线观看免费网址| 欧美三级电影精品| 在线视频精品一| 欧美色视频日本高清在线观看| 日韩视频免费观看高清在线视频| 国产精品久久一卡二卡| 久久漫画官网| 亚洲午夜一区| 欲香欲色天天天综合和网| 欧美人在线观看| 亚洲欧美中日韩| 亚洲国产日韩在线| 国产精品美腿一区在线看| 国产精品一区二区三区四区| 99ri日韩精品视频| 国产日本欧美在线观看| 欧美一级艳片视频免费观看| 136国产福利精品导航网址| 久久精品亚洲| 国产精品一区二区你懂得| 亚洲一二三区在线观看| 麻豆久久精品| 国产精品视频一二三| 亚洲第一黄色网| 美女图片一区二区| 久久精品99国产精品| 欧美日韩一区在线观看| 国产精品白丝av嫩草影院| 亚洲国产综合视频在线观看| 欧美三区在线视频| 免费看黄裸体一级大秀欧美| 亚洲欧美日韩一区在线观看| 亚洲国产精品尤物yw在线观看| 国产精品一区视频网站| 欧美午夜精品久久久| 欧美黄污视频| 美女免费视频一区| 久久久噜噜噜久久久| 亚洲伊人观看| 日韩一级黄色大片| 影音先锋在线一区| 国产伦精品一区二区三区四区免费| 欧美精品久久99| 久久久精品欧美丰满| 欧美一区二区视频网站| 亚洲欧美日本日韩| 欧美日韩精品免费观看视频完整| 可以免费看不卡的av网站| 亚洲国产综合在线看不卡| 欧美伦理视频网站| 国产欧美在线| 红桃av永久久久| 欧美国产精品一区| 蜜臀91精品一区二区三区| 欧美与黑人午夜性猛交久久久| 亚洲一区二区三区四区在线观看| 一区二区国产精品| 亚洲性夜色噜噜噜7777| 亚洲视频在线看| 亚洲欧美激情诱惑| 欧美视频精品在线观看| 国产精品视屏| 国产精品久久久一本精品| 欧美日韩在线一区二区| 欧美性大战久久久久久久| 国产区精品视频| 国产在线不卡视频| 好吊妞这里只有精品| 国产裸体写真av一区二区| 欧美人在线观看| 欧美日韩成人综合| 国产精品日韩一区二区| 欧美区一区二| 欧美日韩dvd在线观看| 国产欧美日韩一区| 亚洲精品在线免费| 欧美77777| 精品粉嫩aⅴ一区二区三区四区| 亚洲精品专区| 亚洲小视频在线| 久久久蜜桃一区二区人| 国产精品免费一区豆花| 国产女主播一区二区三区| 黄网动漫久久久| 国产精品美女久久久久av超清 | 欧美一区二区观看视频| 欧美日本一区二区视频在线观看| 欧美欧美天天天天操| 国产真实精品久久二三区| 一区二区三区四区国产精品| 狂野欧美激情性xxxx欧美| 国内精品视频在线观看| 国产精品一区二区三区观看| 亚洲精品久久在线| 欧美日韩综合一区| 亚洲女爱视频在线| 国产综合在线看| 你懂的成人av| 亚洲无毛电影| 欧美日本在线| 在线观看欧美日韩| 噜噜噜91成人网| 亚洲精品久久久久久久久| 久久蜜桃香蕉精品一区二区三区| 国产欧美综合一区二区三区| 亚洲国产另类久久精品| 久久久久久自在自线| 狠狠v欧美v日韩v亚洲ⅴ| 欧美经典一区二区| 亚洲欧洲精品成人久久奇米网| 亚洲一二三区精品| 欧美激情综合五月色丁香| 亚洲激情偷拍| 欧美日韩精品一区二区| 亚洲国产欧美不卡在线观看| 免费不卡在线观看av| 激情文学一区| 蜜桃伊人久久| 日韩视频―中文字幕| 欧美激情视频一区二区三区不卡| 国内精品伊人久久久久av影院| 午夜一级在线看亚洲| 国产精品影音先锋| 久久久精品国产免大香伊| 国产一区av在线| 男女激情视频一区| 国产日韩在线视频| 卡一卡二国产精品| 午夜精品免费| 一区二区三区精品久久久| 国产亚洲欧美日韩日本| 欧美日韩精品一区二区天天拍小说 | 精品成人一区二区三区四区| 快播亚洲色图| 欧美一级视频免费在线观看| 日韩亚洲一区在线播放| 在线看国产日韩| 欧美在线视频一区| 好看的日韩av电影| 国产精品日韩电影| 欧美日韩国产影片| 欧美护士18xxxxhd| 久久九九热免费视频| 午夜精品成人在线| 亚洲美女电影在线| 亚洲欧洲久久| 影音先锋另类| 国产综合色一区二区三区| 国产精品免费观看视频| 欧美大片一区| 欧美国产第二页| 欧美人与性动交cc0o| 欧美国产日韩一区| 久久精品最新地址| 欧美一区二区精品在线| 亚洲性视频网址| 亚洲永久精品国产| 亚洲男女自偷自拍图片另类| 亚洲一区二区三区午夜| 一区二区三区视频在线看| **网站欧美大片在线观看| 1024成人| 在线亚洲精品福利网址导航| 一本色道久久88综合日韩精品| 亚洲美女视频在线观看| 亚洲一本大道在线| 欧美亚洲综合网| 久久久国产视频91| 美乳少妇欧美精品| 久久香蕉国产线看观看av| 欧美高清视频一区二区三区在线观看| 欧美国产在线电影| 欧美色欧美亚洲另类二区| 国产伊人精品| 亚洲作爱视频| 亚洲综合日韩中文字幕v在线| 久久久噜噜噜久久中文字免| 久久av一区二区三区| 欧美国产精品一区| 国产欧美一区二区精品秋霞影院| 国内伊人久久久久久网站视频| 狠狠久久综合婷婷不卡| 艳女tv在线观看国产一区| 亚洲私人影院| 欧美精品一卡二卡| 国内精品久久久久久影视8| 一区二区欧美亚洲| 欧美韩日一区二区三区| 狠狠色综合色综合网络| 亚洲欧美日韩精品久久亚洲区 | 久久久高清一区二区三区| 免费成人美女女| 国产一区二区三区免费观看| 亚洲影院免费观看| 国产自产精品| 亚洲香蕉在线观看| 欧美午夜激情小视频| 国产日韩欧美精品| 午夜国产不卡在线观看视频|