2012-04-29 14 views
2

ここに問題の洞察はありますか?実行すると、コードは何も得られません。ページにテキストは表示されません。コメント行のコメントを外すと、xmlの結果が表示されます。なぜ私はそれを変数として渡すことができないのですか? (関数が呼び出されているので、私は、FYI、警告を得るか。)xmlhttp.responseTextを返すことができません?

<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> 
+0

Ah!私は、非同期呼び出しから変数を返すことができないことをさらに読んでいます。私はヘルパー関数を使わなければなりません。これは絶対に不可避的に真実ですか? – Aerovistae

答えて

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を構築するのではなく、its builtin AJAX functionalityを使用する必要があります。

+0

関数をパラメーターとして名前のように渡すことはできますか?良い神JavaScriptは素晴らしいです。 Cから来て...あなたはこれがどんなものか分からない。 – Aerovistae

+0

実際、あなたはx86をやっているので、これがどんなものか正確に分かっているかもしれません。途中で素晴らしい、素晴らしい答え。 – Aerovistae

+0

ああ、私はそうです:)しかし、ほとんどすべてのデータ型を失っていることがわかったとき、そしてそのコールバックがFooObjectを期待し、文字列を与えたと言うコンパイラはありません(ただし、Googleクロージャは良いスタートです)。どこでもトレードオフ;) – DCoder

1

は、一つには、あなたは大文字と小文字の問題を持っている、つまりはxmlresultsは定義によりxmlResults

+0

それはちょうど質問のタイプミスでした。コードには存在しませんでした。一定。 – Aerovistae

関連する問題