0


クライアント側のコードがサーバー側の応答と共にどのように処理されるかについて質問があります。実行時に HTTPRequest オブジェクトを使用してサーバー側コードを実行する関数を呼び出し、関数が呼び出されたページに文字列を返すコード (複雑すぎてここに投稿するには長すぎる) があります。何らかの理由で、クライアント側のコードが処理され、文字列が返され (遅すぎる)、それが原因でコードが失敗していると思います。たとえば、HTTPRequest を使用して関数を呼び出し、次の行で返された値 (HTTPRequest からの文字列) をアラートに表示しようとすると、アラートが空白として表示されます。ただし、コードの数行後では、返された値とともに同じアラートが表示されます。だから基本的に、私は、最初のクライアント側のアラートが処理されているため、まだ返されていない文字列を表示しているのに対し、2 番目のアラートは後で処理された (つまり、サーバーにリクエストを処理する時間を与える) という印象を受けています。要求された文字列。この理論は論理的に聞こえますか? HTTPRequest が完了したかどうかに関係なく、クライアント側のコードは実行されますか? その場合、サーバーから応答を受信するまでクライアント側のコードが実行されないようにする方法はありますか?

4

3 に答える 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 に答える