亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > AJAX > 正文

關于IE下AJAX的問題探討

2024-09-01 08:32:37
字體:
來源:轉載
供稿:網友
在IE下,AJAX請求得到響應后,回調函數onreadystatechange是在全局環境下被調用的,而在標準瀏覽器下,其執行上下文是XMLHttpRequest對象

今天JS練手的時候,想封裝一個發送AJAX請求的對象,當然,是想要兼容全瀏覽器的。代碼如下:

復制代碼 代碼如下:


var Ajax = {
xhr: null,
callback: null,
XMLHttp: function() {
var xmlhttp;
//標準瀏覽器
if(window.XMLHttpRequest) {
try {
xmlhttp = new XMLHttpRequest();
}
catch(e) {
alert('Unknown Ajax Error');
//console.log('Unknown Ajax Error');
}
}
//IE瀏覽器
else {
if(window.ActiveXObject) {
try {
xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
}
catch(e) {
try {
xmlhttp = new ActiveXObject('MSXML2.XMLHTTP');
}
catch(e) {
alert('Unknown Ajax Error');
//console.log('Unknown Ajax Error');
}
}
}
}
return xmlhttp;
},
connect: function(paramsObj) {
var PO = paramsObj;
//判斷傳參合法性
if(!(PO instanceof Object)) {
alert('Ajax params illegal');
//console.log('Ajax params illegal');
return false;
}
else if(!(PO.url&&PO.method&&PO.callback)) {
return false;
}
//初始化內部參數
this.xhr = this.XMLHttp();
this.callback = PO.callback;
//遍歷params對象并生成url參數
var requestParams = '';
if(PO.params) {
for(key in Po.params) {
requestParams += '&' + key + '=' + params[key];
}
requestParams = requestParams.substr(1);
}
//發起Ajax請求
try {
var xhr = this.xhr;
xhr.onreadystatechange = this.response;
//POST請求處理
if(PO.method.toLowerCase()=='post') {
xhr.open('POST',PO.url,true);
xhr.send(requestParams);
}
//GET請求處理
else if(PO.method.toLowerCase()=='get') {
xhr.open('GET',PO.url+'?'+requestParams,true);
xhr.send(null);
}
}
catch(e) {
this.callback(null,-1);
}
},
response: function() {
// 此段代碼在全瀏覽器下測試通過
// if(Ajax.xhr.readyState==4) {
// if(Ajax.xhr.status=='200') {
// Ajax.callback(Ajax.xhr.responseText);
// }
// else {
// Ajax.callback(null,Ajax.xhr.status);
// }
// }
//
// 下面的代碼在IE下失效(無報錯,請求有相應,卻沒有返回結果),其它瀏覽器無此問題
if(this.readyState==4) {
if(this.status=='200') {
Ajax.callback(this.responseText);
}
else {
Ajax.callback(null,this.status);
}
}
}
};

//Ajax實例
Ajax.connect({
url: 'test.html',
method: 'GET',
callback: function(data,err) {
if(data!=null) {
alert(data);
// console.log(data);
}
else {
alert(err);
// console.log(err);
}
}
});


問題描述: 大家看一下我代碼中有一塊注釋掉的代碼,那塊代碼是在全瀏覽器下測試通過的。而沒有注釋掉的代碼是有問題的代碼,具體表現:

在Chrome,Firefox,Opera,Safari下測試通過,在IE6、7(IE8+沒有測試)下的表現是:沒有報錯,也沒有返回結果。

對比上下兩塊代碼的不同,我想有兩個可能,一個是this指向的問題,一個是IE下onreadystatechange函數執行的上下文環境有區別于其它瀏覽器。但是現在又無法確定問題,IE6、7下的JS調試又挺困難的(試了firebug-lite,但是沒有想象中的好用,而且這個Ajax對象在firebug-lite下調用卻成功了,有點糊涂)
解決過程:

其實測試方法很簡單。主要是頭腦一發熱沒想到,吃了個飯回來就恍然大悟。

其實JS在處理this指向不明的問題的時候,可以嘗試使用this instanceof Object這類判斷去了解它指向的是一個什么類型的變量。而對于判斷是否為全局調用,則可以使用this===window。在這里我用的就是這個方法。

在代碼出現問題的那一塊,我們可以試著插入一段:

alert(this instanceof Object);

結果發現,在IE6下,返回為false!一目了然!在IE下才可能出現如此詭異的返回值!證明什么?也就是說函數的執行上下文并非是對象!如此一來,在IE下就只能想到window對象了,要知道IE向來都是奇葩。你們標準瀏覽器說window對象是對象,我就偏不認。你還在懷疑我的看法?那何不試試?

alert(this===window);

結果是true!怎么樣?沒話說了吧?所以這樣,問題就明朗了:

在IE下,AJAX請求得到響應后,回調函數onreadystatechange是在全局環境下被調用的。而在標準瀏覽器下,其執行上下文是XMLHttpRequest對象。故造成了我這次的“事故”。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品视频在线播放| 精品中文字幕乱| 97国产成人精品视频| 欧美黑人一区二区三区| 国内精品一区二区三区| 不卡av在线播放| 亚洲欧美激情另类校园| 久久久精品999| 欧美激情精品久久久久久蜜臀| 欧美孕妇孕交黑巨大网站| 日韩在线视频线视频免费网站| 日韩中文在线观看| 亚洲丁香婷深爱综合| 国产99在线|中文| 亚洲激情视频在线| 日韩av快播网址| 久久91精品国产| 久久久影视精品| 日韩hd视频在线观看| 国产精品99蜜臀久久不卡二区| 欧美激情小视频| 亚洲国产97在线精品一区| 久久天天躁狠狠躁老女人| 欧洲s码亚洲m码精品一区| 亚洲国产高清自拍| 中文字幕日韩欧美精品在线观看| 欧美大片欧美激情性色a∨久久| 精品久久久久久久久久久| 亚洲欧美精品一区二区| 日本在线观看天堂男亚洲| 国产精品福利在线观看网址| 日韩精品极品在线观看播放免费视频| 精品色蜜蜜精品视频在线观看| 亚洲人高潮女人毛茸茸| 最新69国产成人精品视频免费| 午夜精品久久久久久久99黑人| 欧美极品少妇xxxxx| 1769国内精品视频在线播放| 亚洲va久久久噜噜噜久久天堂| 中文字幕免费精品一区高清| 欧美日韩亚洲激情| 欧美精品制服第一页| 日韩成人激情影院| 欧美一级黑人aaaaaaa做受| 欧美成人在线免费视频| 久久精品视频在线观看| 国产精品狼人色视频一区| 国产一区二区三区在线播放免费观看| 午夜精品一区二区三区av| 欧美精品videosex牲欧美| 成人精品aaaa网站| 国产精品嫩草视频| 亚洲成人久久电影| 欧美乱妇高清无乱码| 亚洲永久免费观看| 日韩精品极品在线观看| 欧美亚洲一级片| 久久69精品久久久久久久电影好| 日韩麻豆第一页| 精品久久久999| 亚洲综合在线做性| 国产一区红桃视频| 国产精品视频中文字幕91| 亚洲天堂av综合网| 欧美激情亚洲综合一区| 久久久久久亚洲精品不卡| 97人人模人人爽人人喊中文字| 最新中文字幕亚洲| 亚洲国产一区二区三区四区| 热99精品只有里视频精品| 日本不卡免费高清视频| 77777少妇光屁股久久一区| 国产精品久久久久久久久久小说| 亚洲小视频在线观看| 黑人巨大精品欧美一区二区| 欧美天天综合色影久久精品| 久久精品亚洲94久久精品| 精品中文字幕在线| 亚洲精品国产综合区久久久久久久| 欧美大片网站在线观看| 国产精品视频自在线| 国产丝袜一区二区三区免费视频| 美女精品视频一区| 欧美精品久久久久久久免费观看| 国产精品揄拍一区二区| 最近2019中文字幕mv免费看| 国产乱人伦真实精品视频| 国产综合香蕉五月婷在线| 国产欧美久久久久久| 亚洲人成电影网站色www| 综合网日日天干夜夜久久| 亚洲女在线观看| 亚洲偷熟乱区亚洲香蕉av| 九九久久综合网站| 成人黄色大片在线免费观看| 欧美国产亚洲精品久久久8v| 久久久国产一区二区| 亚洲天堂免费在线| 日本91av在线播放| 伊人伊人伊人久久| 久久精品99无色码中文字幕| 日韩成人小视频| 性欧美在线看片a免费观看| 91国产精品电影| 日韩免费av片在线观看| 日韩精品视频在线观看免费| 国产精品自产拍在线观看中文| 欧美成人精品一区二区| 欧美性猛交xxxx乱大交蜜桃| 国产精品久久久久久久久久久久| 日韩在线欧美在线| 国产精品嫩草影院久久久| 国产精品福利久久久| 亚洲社区在线观看| 中文字幕亚洲第一| 一夜七次郎国产精品亚洲| 国产主播喷水一区二区| 岛国av一区二区| 国产精品一区二区三区成人| www.日韩免费| 国产精品视频在线观看| 青青草国产精品一区二区| 国产色综合天天综合网| **欧美日韩vr在线| 国模叶桐国产精品一区| 一本色道久久88亚洲综合88| 国产精品99久久久久久久久| 中文字幕国产亚洲| 亚洲电影免费观看高清完整版在线观看| 1769国内精品视频在线播放| 日韩中文字幕在线视频| 欧美日韩国产综合新一区| 亚洲精品久久久久久久久久久久久| 九九热这里只有在线精品视| 日韩免费在线播放| 91精品国产91久久久久| 91香蕉国产在线观看| 亚洲免费一在线| 欧美日韩国产在线看| 91精品国产综合久久久久久久久| 国产精品9999| 欧美大全免费观看电视剧大泉洋| 岛国av一区二区三区| 亚洲欧洲在线播放| 亚洲自拍高清视频网站| 国产日韩精品一区二区| 亚洲黄色免费三级| 日韩国产精品亚洲а∨天堂免| 日韩最新中文字幕电影免费看| 欧美日韩国产精品一区| 91av福利视频| 国产在线观看精品一区二区三区| 欧美另类交人妖| 97国产精品久久| 欧美激情亚洲国产| 中日韩美女免费视频网址在线观看| 在线观看国产欧美| 欧美精品第一页在线播放| 91美女福利视频高清| 国产精品国产三级国产aⅴ浪潮| 欧美成人午夜激情视频| 一区二区成人精品| 欧美精品在线播放| 欧美激情精品久久久久久变态|