使用.promise()让Ajax请求首先启动?

时间:2015-01-10 03:08:42

标签: javascript jquery ajax promise

我被建议在此函数中使用.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;
                }
            });
        });
    }

1 个答案:

答案 0 :(得分:1)

可能会给出使用.promise()的建议,因为您的代码在进行AJAX调用之前会强制延迟100ms(当动画运行完成时)。进行AJAX调用可能更有意义,然后在等待响应时启动动画。

我已经修改了你的代码来实现这一点,只需在开始动画之前进行AJAX调用即可。 (jQuery.ajax()默认情况下在内部使用.promise()。有关详细信息,请参阅async选项。)请注意,在AJAX调用返回时间小于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);
}