クライアント側のコードがサーバー側の応答と共にどのように処理されるかについて質問があります。実行時に HTTPRequest オブジェクトを使用してサーバー側コードを実行する関数を呼び出し、関数が呼び出されたページに文字列を返すコード (複雑すぎてここに投稿するには長すぎる) があります。何らかの理由で、クライアント側のコードが処理され、文字列が返され (遅すぎる)、それが原因でコードが失敗していると思います。たとえば、HTTPRequest を使用して関数を呼び出し、次の行で返された値 (HTTPRequest からの文字列) をアラートに表示しようとすると、アラートが空白として表示されます。ただし、コードの数行後では、返された値とともに同じアラートが表示されます。だから基本的に、私は、最初のクライアント側のアラートが処理されているため、まだ返されていない文字列を表示しているのに対し、2 番目のアラートは後で処理された (つまり、サーバーにリクエストを処理する時間を与える) という印象を受けています。要求された文字列。この理論は論理的に聞こえますか? HTTPRequest が完了したかどうかに関係なく、クライアント側のコードは実行されますか? その場合、サーバーから応答を受信するまでクライアント側のコードが実行されないようにする方法はありますか?
3 に答える
1
HTTP リクエストは非同期です。これは、コードがそれを送信し、実行を続行することを意味します。XHR リクエストによって返されたデータを受け取り、そのデータを何らかの方法で使用するコールバック関数を設定する必要があります。
于 2012-05-10T17:48:53.493 に答える
0
返された値を表示/操作しようとするコードが ajax ルーチンの範囲内にあることを確認する必要があります。これは、リクエストが完了するまで (成功したかどうかにかかわらず) 応答が処理されないことを保証する唯一の方法です。たとえば、jQuery を使用している場合: 正しい
jQuery.get('ajax/ajax.getSomeData.php',{id:id}, function(data) {
$('#myDIV').html(data);
});
正しくない
jQuery.get('ajax/ajax.getSomeData.php',{id:id}, function(data) {});
$('#myDIV').html(data);
于 2013-07-08T13:28:48.853 に答える
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
}
}
于 2012-05-10T17:51:16.923 に答える