2

ここでの問題に対する洞察はありますか?実行すると、コードは何も生成しません。ページにテキストは表示されません。コメント行のコメントを外すと、xmlの結果が表示されます。なぜ変数として渡せないのですか?(アラートfyiを受け取ったので、関数が呼び出されています。)

 <script type="text/javascript">
           function loadXMLDoc(parameterString)
               {
                   alert("loadXMLDoc has been called.");
                   var xmlhttp = new XMLHttpRequest();

                   xmlhttp.onreadystatechange=function()
                   {
                       if (xmlhttp.readyState==4 && xmlhttp.status==200)
                       {

                  //document.getElementById("xmlResults").innerHTML = xmlhttp.responseText;
                               alert("Got the response!");
                               return xmlhttp.responseText;
                           }
                           else document.getElementById("xmlResults").innerHTML = "No results."
                       }

                       var url =  "http://metpetdb.rpi.edu/metpetwebsearchIPhone.svc?" + parameterString;
                   xmlhttp.open("GET",url,true);
                   xmlhttp.send();
               }
        </script>



        <script type="text/javascript">

       $(function(){

        //left out irrelevant code which creates the var "parameters"

         var results = loadXMLDoc(parameters);

         document.getElementById("xmlresults").innerHTML = results;

       });


       </script>


<body>
<div id="xmlResults"></div>
</body>
4

2 に答える 2

4

定義上、非同期呼び出しは、呼び出し元に結果を待たせることなく実際の作業を実行します。次に、コールバック関数を使用する必要があります。

<script type="text/javascript">
  function loadXMLDoc(parameterString, onComplete, onError) {
    alert("loadXMLDoc has been called.");
    var xmlhttp = new XMLHttpRequest();

    xmlhttp.onreadystatechange=function() {
      if (xmlhttp.readyState==4) {
        if(xmlhttp.status==200) {
          //document.getElementById("xmlResults").innerHTML = xmlhttp.responseText;
          alert("Got the response!");
          onComplete(xmlhttp.responseText);
        } else {
          onError();
        }
      }
    };

    var url =  "http://metpetdb.rpi.edu/metpetwebsearchIPhone.svc?" + parameterString;
    xmlhttp.open("GET",url,true);
    xmlhttp.send();
  }
</script>

<script type="text/javascript">
  $(function(){
    //left out irrelevant code which creates the var "parameters"
    loadXMLDoc(parameters, function(results) {
      // this function will be called if the xmlhttprequest received a result
      document.getElementById("xmlresults").innerHTML = results;
    }, function() {
      // this function will be called if xhr failed
      document.getElementById("xmlResults").innerHTML = "No results.";
    });
  });
</script>

ちなみに、すでにjQueryを使用しているので、カスタムxmlhttprequestを作成するのではなく、組み込みのAJAX機能を使用する必要があります。

于 2012-04-29T07:36:53.670 に答える
1

一つには、キャピタライゼーションの問題がありますxmlresultsxmlResults

于 2012-04-29T05:08:22.970 に答える