使用 .promise() 让 Ajax 请求先启动?
Using .promise() to have the Ajax request start first?
有人建议我在此函数中使用 .promise()
,因为现在 Ajax 调用在加载动画完成之前不会开始。我通读了法典,但无法真正理解如何实施它。谁能告诉我怎么做?
function projectShow() {
$('#loading-animation').show(100, function() {
$.ajax({
type: 'POST',
cache: false,
url: ajaxURL,
data: {'action': 'load-content', post_id: post_id },
success: function(response) {
$('#project-container').slideDown('fast').html(response);
$('#loading-animation').hide();
return false;
}
});
});
}
之所以给出使用 .promise()
的建议,可能是因为您的代码在调用 AJAX 之前强制执行了 100 毫秒的小延迟(在动画运行完成时)。进行 AJAX 调用可能更有意义,然后在等待响应时启动动画。
我已经修改了您的代码,只需在开始动画之前调用 AJAX 即可实现此目的。 (默认情况下,jQuery.ajax()
在内部使用 .promise()
。有关更多信息,请参阅 async
选项。)请注意,如果 AJAX 调用 returns 的时间少于100 毫秒,您的 JavaScript 的执行顺序可能会更改。这可能会导致不良的副作用,但我认为您的情况没问题。
function projectShow() {
$.ajax({
type: 'POST',
cache: false,
url: ajaxURL,
data: {'action': 'load-content', post_id: post_id },
success: function(response) {
$('#project-container').slideDown('fast').html(response);
$('#loading-animation').hide();
return false;
}
});
$('#loading-animation').show(100);
}
有人建议我在此函数中使用 .promise()
,因为现在 Ajax 调用在加载动画完成之前不会开始。我通读了法典,但无法真正理解如何实施它。谁能告诉我怎么做?
function projectShow() {
$('#loading-animation').show(100, function() {
$.ajax({
type: 'POST',
cache: false,
url: ajaxURL,
data: {'action': 'load-content', post_id: post_id },
success: function(response) {
$('#project-container').slideDown('fast').html(response);
$('#loading-animation').hide();
return false;
}
});
});
}
之所以给出使用 .promise()
的建议,可能是因为您的代码在调用 AJAX 之前强制执行了 100 毫秒的小延迟(在动画运行完成时)。进行 AJAX 调用可能更有意义,然后在等待响应时启动动画。
我已经修改了您的代码,只需在开始动画之前调用 AJAX 即可实现此目的。 (默认情况下,jQuery.ajax()
在内部使用 .promise()
。有关更多信息,请参阅 async
选项。)请注意,如果 AJAX 调用 returns 的时间少于100 毫秒,您的 JavaScript 的执行顺序可能会更改。这可能会导致不良的副作用,但我认为您的情况没问题。
function projectShow() {
$.ajax({
type: 'POST',
cache: false,
url: ajaxURL,
data: {'action': 'load-content', post_id: post_id },
success: function(response) {
$('#project-container').slideDown('fast').html(response);
$('#loading-animation').hide();
return false;
}
});
$('#loading-animation').show(100);
}