处理xmlhttp请求文本响应时出错了

时间:2012-02-08 15:51:17

标签: javascript ajax

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时 在phonefax个元素上,我得到alert("something went wrong")两次,然后我得到alert("done")一切正常,但只要请求成功,我就不应该alert("something went wrong")代码可能出错。

1 个答案:

答案 0 :(得分:0)

这种行为很可能是因为大多数(现代'')浏览器会触发readyState事件12,尤其是3readyState 3是一种称为交互模式,在请求期间触发,因此您可以在数据流仍然流式传输时拦截和发现数据。

简而言之,您的onreadystatechange处理程序会被多次调用(这就是它应该如何),并且由于您正在检查readyState === 4,它会为您调用else个案其他情况。

要确定某些内容是否真的出错,您应该在那里单独检查status codes