2

我正在使用 jquery,并且我有 2 个 ajax 调用函数。当我调用第一个 ajax 请求时,结果将显示在 div id="result" 处。然后我调用第二个 ajax,我希望它也显示在 div id="result" 并替换从第一个 ajax 返回的先前结果。从我的测试来看,我仍然能够在浏览器开发者工具下看到之前的结果。

第二个问题是,如果重复点击是否会导致内存泄漏?

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

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

4 回答 4

2

Javascript 本质上是单线程的,因此您的调用永远不会发生冲突或导致内存泄漏。但是,时间尚未确定。第一个完成的调用将首先执行。

换句话说,所有异步回调都将在同一个线程上按顺序发生。

于 2012-09-30T11:28:17.570 回答
1

然后我调用第二个 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

如果有两个 ajax 异步请求,第二个请求可以在您的第一个请求之前完成。在这种情况下,您最终会看到第一个结果。您应该在第一个请求的成功回调中调用第二个 ajax 请求。例如:

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

您可以在第二个结果之前使用 .html(' ') - 带有空字符串的 html 函数,它将第一个结果替换为空,然后将替换第二个 ajax 调用的结果。

以下是代码:

$.ajax({

网址:'someurl',

类型:'发布'

成功:函数(){

$("#result").html(结果);

}

});

$.ajax({

网址:“ajax/func2”,

类型:“帖子”

成功:函数(){

$("#result").html(' ');

$("#result").html(结果);

}

});

于 2016-07-13T04:57:05.117 回答