Ajax練習:Google瀏覽器在xmlHttp.readyState==1的狀態無反應

edited 十月 2013 in 其他
這幾天找了一個Ajax範例,實做的結果IE,FF都沒有問題,
唯Chrome在xmlHttp.readyState==1的狀態時沒有任何反應,
我的版本是6.0.472.53,不知道有沒有有遇過類似的問題?
還是程式上有甚麼不嚴謹的部分?

(程式請見附加檔案)

*應該說有時會沒反應有時候又有,有試過清除暫存關掉重開,總之有一定的機率會發生無任何反應的問題...orz怪

原始討論: http://twpug.net/x/modules/newbb/viewtopic.php?topic_id=5384

評論

  • edited 九月 2010
    這樣寫本來就不會接到.readyState==1的回應
    因為1是表示已經調用.open()完成
    但是.open()在.onreadystatechange事件前就被調用了,所以你應該不可能接到.readyState==1的回應
    故,想接到.readyState==1 =>.onreadystatechange必須在.open()之前
    那麼為什麼有時候接到呢?
    因為你使用同一個全域變數...在連續操作時有可能會因為一個xhr請求還在等候php而又將它再次初始化引發
    基於以上兩點,我建議你這樣寫
    function S_xmlhttprequest(){
    	if (window.ActiveXObject){
    		var xmlHttp = new ActiveXObject ('Microsoft.XMLHTTP');//IE
    	}
    	else if (window.XMLHttpRequest){
    		var xmlHttp = new XMLHttpRequest();//其他
    	}
    	return xmlHttp;
    }
    
    function ans(ans){
    	var xmlHttp=S_xmlhttprequest();
    	xmlHttp.onreadystatechange = function(){byphp(xmlHttp)}
    	xmlHttp.open("GET","php.php?id="+ans,true);
    	xmlHttp.send(null);
    }
    
    function byphp(xmlHttp){
    	alert(xmlHttp.readyState);
     if(xmlHttp.readyState==0){
      document.getElementById('show').innerHTML = "NON";
      }
     if(xmlHttp.readyState==1){
      document.getElementById('show').innerHTML = '<img src="xxx">叉燒包中';
      }
     if(xmlHttp.readyState==4 && xmlHttp.status==200){
     var final = xmlHttp.responseText;
     document.getElementById('show').innerHTML = final;
     }
     }
    	S_xmlhttprequest();
    	xmlHttp.onreadystatechange = byphp;
    	xmlHttp.open("GET","php.php?id="+ans,true);
    	xmlHttp.send(null);
    }
    
  • edited 九月 2010
    搞懂了問題,應該先決定資料的處理方式onreadystatechange,在送出要處理的資料open(),
    另外在程式的撰寫邏輯上...真的是拋磚引玉XD!,感謝SoltyRain大!

    (後面五行是貼上來的關係還是參照比對用所以留著?)
Sign In or Register to comment.