2

私はjqueryを使用しており、2つのajax呼び出し機能があります。最初の ajax リクエストを呼び出すと、結果が div id="result" に表示されます。次に、2 番目の ajax を呼び出し、div id="result" にも表示して、最初の ajax から返された前の結果を置き換えます。私のテストでは、ブラウザの開発者ツールで以前の結果を確認できました。

2番目の質問は、繰り返しクリックするとメモリリークが発生するかどうかです。

$.ajax({
  url: "ajax/func1",
  type: "post"
});

$.ajax({
  url: "ajax/func2",
  type: "post"
});
4

4 に答える 4

2

Javascript は基本的にシングル スレッドであるため、呼び出しが競合したり、メモリ リークが発生したりすることはありません。ただし時期は未定。最初に完了した呼び出しが最初に実行されます。

つまり、すべての非同期コールバックは同じスレッドで順番に発生します。

于 2012-09-30T11:28:17.570 に答える
1

次に、2 番目の ajax を呼び出し、div id="result" にも表示して、最初の ajax から返された前の結果を置き換えます。

メソッドを使用するhtml()と、毎回コンテンツが返された結果に置き換えられます。doneたとえば、コールバックで結果を div に割り当てることができます。

$.ajax({
  url: "ajax/func1",
  type: "post"
}).done(function(result) { 
  $("#result").html(result);
});

$.ajax({
  url: "ajax/func2",
  type: "post"
}).done(function(result) { 
  $("#result").html(result);
});

done基本的には同じですが、ドキュメントsuccessのコメントを正しく理解していれば、すぐに非推奨になる可能性があります。

非推奨の通知: jqXHR.success()、jqXHR.error()、および jqXHR.complete() コールバックは、jQuery 1.8 で非推奨になります。最終的な削除に備えてコードを準備するには、代わりに jqXHR.done()、jqXHR.fail()、および jqXHR.always() を使用してください。

繰り返しクリックするとメモリリークが発生するかどうか

いいえ、メモリ リークが発生することはありません。すべてのリクエストは、次々に実行する必要があります。

于 2012-09-30T11:29:48.507 に答える
1

2 つの ajax 非同期リクエストがある場合、最初のリクエストの前に 2 番目のリクエストを完了することができます。この場合、最後に最初の結果が表示されます。最初のリクエストの成功コールバックで 2 番目の ajax リクエストを呼び出す必要があります。例えば:

 $.ajax({
  url:'someurl',
  type:'post'
  success: function(){
  // Insert smth in result div
  // call second ajax request
}
于 2012-09-30T11:31:10.400 に答える