2012-05-10 2 views
0


私は、クライアント側のコードがサーバー側の応答とともにどのように処理されるかについて質問します。 実行時に、HTTPRequestオブジェクトを使用してサーバーサイドコードを実行する関数を呼び出し、その関数が呼び出されたページに文字列を戻すコードがあります。何らかの理由で、私はクライアント側のコードが処理されていると思いますが、文字列が返され(遅すぎます)、コードが原因で失敗しています。たとえば、私はHTTPRequestで関数を呼び出し、次の行では、返された値(HTTPRequestからの文字列)を警告に表示しようとします。警告は空白として表示されます。コードの後ろのほんの数行で、返された値と同じアラートが表示されます。ですから、基本的には、最初のクライアント側のアラートが処理されているため、まだ返されていない文字列が表示されますが、2番目のアラートは後で処理されます。要求された文字列を表示します。この理論は理にかなっていますか? HTTPRequestが完了したかどうかにかかわらず、クライアント側のコードは実行されますか?もしそうなら、サーバーからの応答が受信されるまでクライアント側のコードが実行されないようにする方法はありますか?AJAX、クライアントサイドJavaScriptはサーバーサイドJavaScriptより先に処理されますか?

+0

[非同期/同期のJavascript]の可能複製(http://stackoverflow.com/questions/6748287/asynchronous-synchronous-javascript) – user123444555621

+0

はい、デフォルトでは非同期で、コードは引き続き実行されます。 – Zachary

+0

async = falseをリクエストしない場合は、JSはシングルスレッドで、サイト全体がロックされます。 – marteljn

答えて

1

HTTPリクエストは非同期です。つまり、あなたのコードはそれを送信し、実行し続けます。 XHR要求によって返されたデータを取得し、そのデータを何らかの方法で使用するコールバック関数を設定する必要があります。

0

あなたはとてもXMLHttpRequestオブジェクトのonreadystatechangeにイベントに匿名関数をバインドする必要があります。

//xhr is an instance of the XmlHTTPRequest object that you have opened correctly 
xhr.onreadystatechange = function(){ //4 means the request was successful 
    if (xhr.readyState === 4){ 
    //Your code here 
    } 
} 
0

あなたは、戻り値のご表示しようとしたコードのビット/行為は内であることを確認する必要がありますajaxルーチンのスコープ。これは、リクエストが完了するまで(成功したかどうかにかかわらず)レスポンスが実行されないことを保証する唯一の方法です。たとえば、あなたはjQueryのを使用している場合: CORRECT

jQuery.get('ajax/ajax.getSomeData.php',{id:id}, function(data) { 
    $('#myDIV').html(data); 
}); 

INCORRECT
jQuery.get('ajax/ajax.getSomeData.php',{id:id}, function(data) {}); 
$('#myDIV').html(data); 
関連する問題