ajax非同步提交後出現卡死現象
阿新 • • 發佈:2019-01-04
本人是做電視節目站點開發,最近出現一個問題,非同步提交後,頁面一直在緩衝,出現卡死現象,
在電腦測試一切正常,感覺很鬱悶,程式碼什麼沒有問題,後發現是ajax問題。
ajax分為同步提交和非同步提交。以下是兩個方法區別。
非同步方法:
- function getJSON2(){
- var tmp;
- var xmlHttpRequest=createAjaxObject();
-
xmlHttpRequest.open('GET',url,true);//GET即採用get方法,url為請求的地址,true設定為非同步,預設就是非同步,所以也可以不用寫
- xmlHttpRequest.send(null);
- xmlHttpRequest.onreadystatechange = function(){ //註冊回撥函式
- //readyState有四種可能值:0——請求未初始化(在呼叫 open() 之前),1——請求已提出(呼叫 send() 之前),2——請求已傳送(這裡通常可以從響應得到內容頭部),3——請求處理中,4——請求已完成。
- if(xmlHttpRequest.readyState==4){
-
if
- alert(xmlHttpRequest.responseText);
- //var json = eval('('+xmlHttpRequest.responseText+')');
- //alert(json.Stops[0].StopName);
- //tmp = json.Stops[0].StopName;
-
//alert(tmp);//有值
- }
- }
- }
- //alert(tmp); //沒有值
- xmlHttpRequest=null;
- }
- 同步方法:
- function getJSON2(){
- var tmp;
- var xmlHttpRequest=createAjaxObject();
- xmlHttpRequest.open('GET',url,false);//GET即採用get方法,url為請求的地址,false設定為同步,預設就是非同步,所以也可以不用寫
- xmlHttpRequest.send(null);
- var result = xmlHttpRequest2.status;
- if(result == 200){
- alert(xmlHttpRequest.responseText);
- //var json = eval('('+xmlHttpRequest.responseText+')');
- //alert(json.Stops[0].StopName);
- //tmp = json.Stops[0].StopName;
- //alert(tmp);//有值
- }
- //alert(tmp); //有值,成功,但是破壞了ajax非同步的初衷。
- xmlHttpRequest=null;
- }
還有,同步非同步使用xmlhttp池時都要注意:取得xmlhttp時只能新建xmlhttp,不能從池中取出已用過的xmlhttp,(這種情況主要發生在需要迴圈的時候)因為被使用過的xmlhttp的readyState為4,所以同步非同步都會send但不執行onreadystatechange。