使用 .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);
}