1

我有这个代码:

function loadRegions()
{
    var xmlhttp;

    if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
         xmlhttp=new XMLHttpRequest();
    }
    else
    {// code for IE6, IE5
         xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
           alert("Ready:"+xmlhttp.status);
           xmlDoc=xmlhttp.responseXML;
           x=xmlDoc.getElementsByTagName("region");
           alert(x[0]);
           alert(x[1]);
       }
   }

   var ctrcode = frm.elements['countrycode'];
   xmlhttp.open("GET","http://mydomain.gr/regionslist.php?countrycode="+ctrcode.value,true);
   xmlhttp.send();
}

我的 HTML 中有一个select项目,当有人选择一个项目时,会调用此函数来获取该国家/地区的区域。我可以从控制台看到请求已完成,但从未得到响应。我的onreadystatechange函数永远不会被调用。当我删除xmlhttp.status==200然后调用函数但xmlDoc对象是nulland xmlhttp.status==0。如果我单独调用它,我使用的 URL 有效。为什么我的onreadystatechange函数不起作用,为什么它不返回状态 200?

4

1 回答 1

1

在调用 send() 函数之前添加这一行:

xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

并在调用 open() 后设置 onReadyStateChange 函数

原因:
1)responseXML属性表示收到完整的HTTP响应时的XML响应(当readyState为4时),当Content-Type头指定MIME(媒体)类型为text/xml,application/xml,或end在 +xml 中。如果 Content-Type 标头不包含这些媒体类型之一,则 responseXML 值为 null。
2) 初始响应后,所有事件监听器将被清除。在设置 onreadystatechange 监听器之前调用 open()。
这是第一个第二个原因的参考

于 2012-07-11T11:18:20.900 回答