【问题标题】:Prevent multiple ajax submissions on multiple clicks防止多次点击多次提交ajax
【发布时间】:2014-11-29 08:21:14
【问题描述】:

我有一个运行此 jQuery 代码的 WordPress 博客,允许用户单击书签链接,将帖子保存为书签。每个帖子都会显示一个总书签计数器,如下所示:“已添加书签 (5)”。尽管此代码有效,但只要有人在书签链接上多次单击,它就会注册多次点击,然后将同一篇文章保存为多个书签。当用户试图通过再次单击书签链接来删除书签时,它会再次记录多次单击,并且计数器开始显示负数,如下所示:“已添加书签 (-5)”。

我一直在寻找有关如何防止这种情况发生的说明,以便书签计数器永远不会减负,并且用户不能多次为同一个帖子添加书签,但到目前为止没有成功。

这是我正在使用的 jQuery 代码:

jQuery(document).ready( function($) {

var added_message = upb_vars.added_message;
var delete_message = upb_vars.delete_message

$(document).on('click', '.upb_add_bookmark', function () {

    var post_id = $(this).attr('rel');
    var data = {
        action: 'bookmark_post',
        post_read: post_id
    };
    $.post(upb_vars.ajaxurl, data, function(response) {

        $('.upb_bookmark_control_'+post_id).toggle();
        if($('.upb-bookmarks-list').length > 0 ) {
            var bookmark_data = {
                action: 'insert_bookmark',
                post_id: post_id
            };
            $.post(upb_vars.ajaxurl, bookmark_data, function(bookmark) {
                $(bookmark).appendTo('.upb-bookmarks-list');
                $('.no-bookmarks').fadeOut();
            });
        }
    });
    return false;
});

$(document).on('click', '.upb_del_bookmark', function () {

        var post_id = $(this).attr('rel');
        var data = {
            action: 'del_bookmark',
            del_post_id: post_id
        };
        $.post(upb_vars.ajaxurl, data, function(response) {
            $('.bookmark-'+post_id).fadeOut();
            $('.upb_bookmark_control_'+post_id).toggle();
        });

    return false;
});
});

你能帮我解决这个问题吗?

非常感谢!

【问题讨论】:

    标签: javascript jquery ajax wordpress


    【解决方案1】:

    一种方法是在$.post() 之前将.disabled 类添加到您的链接中。

    // Before ajax...
    if ($(this).hasClass('disabled')) {
        return false;
    } else {
        $(this).addClass('disabled');
    }
    // Make sure we refer to the same element
    var that = this;
    
    // On post success...
    $(that).removeClass('disabled');
    

    【讨论】:

    • 感谢羊皮纸提供这个解决方案!这段代码在您的帮助下完美运行,但不知何故我发现当前的行为对用户不是很友好。目前,在应用您的解决方案后,它允许用户单击一次以添加书签并再次单击以将其删除,但之后,第三次单击会使页面跳转到顶部,这会使许多用户感到困惑。您能否帮助我,以便我可以使用户能够根据需要多次添加/删除书签,而不会使他们的点击在第三次点击时跳转,并且仍然能够防止多个 ajax 帖子?谢谢!
    • @AvinashSingh 你应该用return false 替换那里的return。但是,这意味着存在.disabled 类未被删除的情况。我认为您可能需要在第一个 $.post() 中的 if ($(..).length > ..) 语句中添加 else { $(that).removeClass... }
    • 非常感谢,羊皮纸!你是一个救生员!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-18
    相关资源
    最近更新 更多