HTML:
<div id="phone" onclick="getNum('ph')" class="onClic">phone number</div>
<div id="fax" onclick="getNum('fx')" class="onClic">fax number</div>
JavaScript的:
<script type="text/javascript">
function getNum(rq){
if (window.XMLHttpRequest){
xmlhttp=new XMLHttpRequest();
}else{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200 && xmlhttp.responseText.trim()!="fail"){
if(rq=="ph"){
document.getElementById("phone").innerHTML="99066744";
}else if(rq=="fx"){
document.getElementById("fax").innerHTML="93393368";
}
alert("done");
}else{
alert("something went wrong");
}
}
xmlhttp.open("GET","includes/getnum.php?idu=1&rq="+rq,true);
xmlhttp.send();
}
</script>
getnum.php
输出任何内容或"fail"
。当我通过点击触发JavaScript时
在phone
或fax
个元素上,我得到alert("something went wrong")
两次,然后我得到alert("done")
。 一切正常,但只要请求成功,我就不应该alert("something went wrong")
。代码可能出错。
答案 0 :(得分:0)
这种行为很可能是因为大多数(现代'')浏览器会触发readyState事件1
,2
,尤其是3
。 readyState 3
是一种称为交互模式,在请求期间触发,因此您可以在数据流仍然流式传输时拦截和发现数据。
简而言之,您的onreadystatechange
处理程序会被多次调用(这就是它应该如何),并且由于您正在检查readyState === 4
,它会为您调用else
个案其他情况。
要确定某些内容是否真的出错,您应该在那里单独检查status codes
。