国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

firefox下對ajax的onreadystatechange的支持情況分析

2024-05-06 14:12:18
字體:
來源:轉載
供稿:網友
一、問題:
代碼如下:
var xmlHttp;
function savecarttodata(){
createXMLHttpRequest();
var rndcode = new Date().getTime();
var CartUrl ="a.asp?cache="+rndcode
xmlHttp.onreadystatechange = function(){
.....

}
xmlHttp.open ("GET",CartUrl,true);
xmlHttp.send(null);
}

上面的這段代碼, xmlHttp.onreadystatechange = function(){.....};可以在FF下執行,但是如果改成

xmlHttp.open ("GET",Url,false);時就不行了,今天被這個問題整的暈頭轉向。

原因分析:

其一:這時不能用xmlHttp.send(),需要內容,如果沒有內容,要用NULL

其二:經測試后發現,onreadystatechange在IE下都很正常,但在FF3下,只能運行readyState=0時的代碼。不能運行readyState=4的代碼,在網絡上找了一個原因:
在ajax的XMLHttpRequest.onreadystatechange方法的差異:在FF中當狀態為1(即XMLHttpRequest已經調用open但還沒有調用send時),FF則會繼續執行onreadystatechange后面的代碼,到執行完后面的代碼后,在執行onreadystatechange在狀態2,3,4的代碼,而IE會等待狀態2的到了,執行完onreadystatechange中狀態2,3,4的代碼后,繼續執行后面的代碼,這樣問題就出現了,經常我們在onreadystatechange的代碼要處理從服務器上獲得的數據(這個數據只有在onreadystatechange的狀態為4時,才可以得到),所以這在IE中不存在問題,因為它會等待onreadystatechange狀態4到來以后,在執行onreadystatechange后面的數據,但是由于FF不會等到onreadystatechange狀態4到來后在執行onreadystatechange后面的代碼,所以后面的代碼就不能處理從服務器上獲得的數據,那該怎么辦呢?

解決方法:使用javascript的閉包(這個解決方法是從GMAP中獲得靈感的)。我們傳遞一個函數給onreadystatechange,在這個函數中處理從服務器上返回的數據,但是onreadystatechange是一個無參函數,那該怎么辦呢?方法在我前面的Javascript attachEvent傳遞參數的辦法已經介紹 了,這里再稍微介紹一下,就是傳遞一個參數給onreadystatechange,但是在onreadystatechange中使用return一個無參函數,在這個無參函數中可以使用這個傳入的參數。這個方法在IE和FF中都可以正常運行,所以這不失是一個好方法。

這里提到采用閉包,挺復雜,另外網上有采用了在FF下用onload,也是不管用。經過對錯誤排除,上面摘要提到的原因,才是根本的,也就是說,在FF下,第一次執行完onreadystatechange后,繼續執行到send,但后面就不會再回頭執行onreadystatechange,一直傻傻的走下去。

我直接改成:
代碼如下:
xmlHttp.onreadystatechange = xmlHandle;
xmlHttp.open ("GET",Url,false);
xmlHttp.send(null);
xmlHttp.onreadystatechange = xmlHandle; //這里加一行擋住FF,讓它再搞一次。


function xmlHandle(){
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 大姚县| 新巴尔虎右旗| 张家川| 丁青县| 隆林| 信丰县| 小金县| 嘉荫县| 嘉祥县| 交城县| 孟州市| 田阳县| 吉首市| 蒲江县| 马山县| 老河口市| 聂荣县| 甘谷县| 萍乡市| 清水河县| 大厂| 德庆县| 喀喇沁旗| 正安县| 鸡东县| 宁河县| 佛山市| 佛教| 江川县| 珠海市| 西城区| 安丘市| 佛冈县| 那曲县| 安溪县| 浮梁县| 永和县| 南涧| 郁南县| 若羌县| 阳高县|