2012-03-15 18 views
0

誰かがなぜこれがうまくいかないのか教えてください。私はこのコードの量のためのより多くのテキストを必要とするいくつかの理由 ...カントは本当に、これは誰にも利益を得ることができる方法を見ますが、いくつかのより多くのテキストを持っているものは何でも.....Javascript - return(xmlhttp.responseText)not working

この:

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("rS4Xs200"); 
    var string33 = xmlhttp.responseText; 
    //document.write(xmlhttp.responseText); 
      return(string33); 

    } 
    } 
    var urlToGet = 'd2/two.php'; 
    alert(urlToGet); 
xmlhttp.open("GET",urlToGet,true); 
xmlhttp.send(); 

} 

戻り値: AJAXリクエストが非同期であるため、スクリプトがAJAXrequestDLC()関数を呼び出し、最終的にxmlHttpp要求を送信しますが、それは、その関数を含む書き込みコマンドに移行しているため、それは「未定義」見せている理由がある

undefined 
+0

xmlhttp.responseTextが定義されていないためです。 – rlemon

+0

全体のxhrコードを投稿してください。そして可能であれば該当するサーバーコード – rlemon

+0

大丈夫は、関数 – King

答えて

0

befを呼び出すonreystatechange関数が起動されます(応答がまだ返されていないため)。あなたが「ブーム」アラートが待っている間にスクリプトが上に移動したことを示す、あなたのコード内のonreadystatechangeに機能してアラートの前に来ることに気づくでしょう

function runAJAX2() { 
var result = AJAXrequestDLC(); 
alert('boom'); 
document.write(result); 
} 

:あなたのような何かにあなたのコードを変更することでこれを確認することができますあなたのPHPファイルからの応答のために。

EDIT:二回、この答えを書き直したと私はまだ少しので、ここで別の説明だ自分自身を混乱させる:

  1. 機能runAJAXは()
  2. のdocument.write(AJAXrequestDLC())と呼ばれています。 AJAXrequestDLC関数内AJAXrequestDLC()関数
  3. を呼び出し、XMLHTTP要求(不定である)AJAXrequestDLC()の現在の値を書き込むのdocument.writeコマンド、このポイントプログラムリターンで
  4. に送られます。
  5. マイクロ秒後に応答がPHPスクリプトから返され、xmlhttp.onreadystatechangeイベントが発生し、インライン関数が呼び出されます。しかし、プログラムフローは既に移動しているので、return文は効果がありません。
+0

xmlresponseがいっぱいになるまでスクリプトの実行を遅らせることはできますか? – King

+0

何かの理由であなたのPHPスクリプトがあなたのスクリプト(そしてブラウザ)に応答するのに長い時間がかかった場合には、応答を待つことになります。あなたがそれをしたい場合、これは良い説明です:http://www.hunlock.com/blogs/Snippets:_Synchronous_AJAX – TheOx

+0

それは、HTMLページですPHPスクリプトではありません:)アヤックスコールはそれがすべてですので、私は疑いがありますそれは応答するには時間がかかりすぎる可能性があります – King