diff --git src/wp-admin/js/edit-comments.js src/wp-admin/js/edit-comments.js
index b9a9f2cf85..35938d5961 100644
--- src/wp-admin/js/edit-comments.js
+++ src/wp-admin/js/edit-comments.js
@@ -288,6 +288,11 @@ setCommentsList = function() {
 			$('.avatar', el).first().clone().prependTo('#undo-' + id + ' .' + action + '-undo-inside');
 
 			a.click(function( e ){
+
+				// Abort undo if there is an unfinished AJAX request involving the same comment.
+				if ( settings.xhrs && 'undefined' !== typeof settings.xhrs['comment-' + id] && 4 !== settings.xhrs['comment-' + id].readyState ) {
+					return false;
+				}
 				e.preventDefault();
 				e.stopPropagation(); // ticket #35904
 				list.wpList.del(this);
diff --git src/wp-includes/js/wp-lists.js src/wp-includes/js/wp-lists.js
index c73471dbcb..33282196ed 100644
--- src/wp-includes/js/wp-lists.js
+++ src/wp-includes/js/wp-lists.js
@@ -184,7 +184,13 @@ wpList = {
 		 *                                  'timeout', 'abort', or 'parsererror'.
 		 * @param {object} settings.parsed  Parsed response object.
 		 */
-		dimAfter: null
+		dimAfter: null,
+
+		/**
+		 * Track XHR connections.
+		 * @type {Object}
+		 */
+		xhrs: {}
 	},
 
 	/**
@@ -404,12 +410,27 @@ wpList = {
 			data     = wpList.parseData( $element, 'delete' ),
 			$eventTarget, parsedResponse, returnedResponse;
 
+		// Clear all finished AJAX requests from xhrs object.
+		if ( 'undefined' !== typeof wpList.xhrs ) {
+			for ( var key in wpList.xhrs ) {
+				if ( 4 === wpList.xhrs[ key ].readyState ) {
+					delete wpList.xhrs[ key ];
+				}
+			}
+		}
+
+
 		settings = settings || {};
 		settings = wpList.pre.call( list, $element, settings, 'delete' );
 
 		settings.element  = data[2] || settings.element || null;
 		settings.delColor = data[3] ? '#' + data[3] : settings.delColor;
 
+		// Return if there is already an AJAX request in progress involving the same element.
+		if ( wpList.xhrs && 'undefined' !== typeof wpList.xhrs[ s.element ] && 4 !== wpList.xhrs[ s.element ].readyState ) {
+			return false;
+		}
+
 		if ( ! settings || ! settings.element ) {
 			return false;
 		}
@@ -473,7 +494,8 @@ wpList = {
 			}
 		};
 
-		$.ajax( settings );
+		wpList.xhrs = wpList.xhrs || {};
+		wpList.xhrs[ s.element ] = $.ajax( settings );
 
 		return false;
 	},
@@ -504,6 +526,11 @@ wpList = {
 		settings.dimAddColor = data[4] ? '#' + data[4] : settings.dimAddColor;
 		settings.dimDelColor = data[5] ? '#' + data[5] : settings.dimDelColor;
 
+		// Return if there is already an AJAX request in progress involving the same element.
+		if ( wpList.xhrs && 'undefined' !== typeof wpList.xhrs[ s.element ] && 4 !== wpList.xhrs[ s.element ].readyState ) {
+			return false;
+		}
+
 		if ( ! settings || ! settings.element || ! settings.dimClass ) {
 			return true;
 		}
@@ -587,6 +614,16 @@ wpList = {
 		};
 
 		settings.complete = function( jqXHR, status ) {
+
+			// Clear all finished AJAX requests from xhrs object.
+			if ( 'undefined' !== typeof wpList.xhrs ) {
+				for ( var key in wpList.xhrs ) {
+					if ( 4 === wpList.xhrs[ key ].readyState ) {
+						delete wpList.xhrs[ key ];
+					}
+				}
+			}
+
 			if ( $.isFunction( settings.dimAfter ) ) {
 				$eventTarget.queue( function() {
 					settings.dimAfter( returnedResponse, $.extend( {
@@ -598,7 +635,8 @@ wpList = {
 			}
 		};
 
-		$.ajax( settings );
+		wpList.xhrs = wpList.xhrs || {};
+		wpList.xhrs[ s.element ] = $.ajax( settings );
 
 		return false;
 	},
@@ -836,7 +874,7 @@ wpList = {
 $.fn.wpList = function( settings ) {
 	this.each( function( index, list ) {
 		list.wpList = {
-			settings: $.extend( {}, wpList.settings, { what: wpList.parseData( list, 'list' )[1] || '' }, settings )
+			settings: $.extend( {}, wpList.settings, { what: wpList.parseData( list, 'list' )[1] || '' }, { xhrs: wpList.xhrs }, settings )
 		};
 
 		$.each( functions, function( func, callback ) {
