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オブジェクトはnullandxmlhttp.status==0です。私が使用するURLは、単独で呼び出すと機能します。onreadystatechange関数が機能しないのはなぜですか?また、ステータス200が返されないのはなぜですか?

4

1 に答える 1

1

send()関数を呼び出す前に次の行を追加します。

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

また、open()を呼び出した後にonReadyStateChange関数を設定します

理由:
1)responseXMLプロパティは、完全なHTTP応答が受信されたとき(readyStateが4のとき)、Content-TypeヘッダーがMIME(メディア)タイプをtext / xml、application / xml、またはendsとして指定したときのXML応答を表します。 +xmlで。Content-Typeヘッダーにこれらのメディアタイプのいずれかが含まれていない場合、responseXML値はnullです。
2)最初の応答後、すべてのイベントリスナーがクリアされます。onreadystatechangeリスナーを設定する前にopen()を呼び出します。
ここに最初2番目の理由の参照があります

于 2012-07-11T11:18:20.900 に答える