jquery pass deferred,promise,do ajax,right pattern to do

问题描述 投票:0回答:1

我有2个jquery插件(代码简化):

(function ($, window, document, undefined) {
    $.fn.loadPageContent = function (url, postData) {
        url = url || window.location.href;
        postData = postData ? postData : {};
        return $.post(url, postData);
    }
})( jQuery, window, document );

(function ($, window, document, undefined) {
    $.fn.infinityLoader = function (url, startPageNo, postData ) {
        var $elms = this;
        $(window).on('scroll.infinityScroll', function() {
            if($(window).scrollTop() + $(window).height() > $(document).height()) {
                $elms.loadPageContent(url, postData);
            }
        });
    }
})( jQuery, window, document );

有没有办法调用infinityLoader并以某种方式传递承诺loadPageContent所以我能够做到:

$('#content').infinityLoader('http://example.com?page=', 1, {}).done(function(){
    alert('Content loaded!');
});
javascript jquery ajax promise deferred
1个回答
0
投票

像这样改变你的infinityLoader功能。记住你必须在完成Deferred后调用后解决loadPageContent对象。

(function ($, window, document, undefined) {
        $.fn.infinityLoader = function (url, startPageNo, postData) {
            var d = $.Deferred();
            var $elms = this;
            $(window).on('scroll.infinityScroll', function () {
                if ($(window).scrollTop() + $(window).height() > $(document).height()) {
                    $elms.loadPageContent(url, postData).done(function () {

                        d.resolve();
                    });
                }
            });
            return d.promise();
        }
    })(jQuery, window, document);
© www.soinside.com 2019 - 2024. All rights reserved.