Description
The schedule JavaScript function of the ajax channel uses a BUSY flag and a request queue in a callbacks array.
If the channel is marked as busy because there is a request currently being executed, the second part of the function is executed and for channel type DROP, the newly scheduled request is put into the callbacks queue.
Using this approach, the dropping channel type actually allows 2 requests in the "total queue".
The one that triggers the busy = true which is still running and the one that is stored into the callbacks array.
Reading the documentation of AjaxChannel.DROP says:
dropping - only the last Ajax request is processed, the others are discarded
schedule: function (callback) {
if (this.busy === false) {
this.busy = true;
try
catch (exception)
{ this.busy = false; Wicket.Log.error("An error occurred while executing Ajax request:" + exception); } } else {
Wicket.Log.info("Channel busy - postponing...");
if (this.type === 's')
else
{ /* drop */ this.callbacks = []; // THIS IS WRONG this.callbacks[0] = callback; } return null;
}
},
To make it work, the dropping channel should NOT store the currently scheduled request, but simply clear the callbacks array.
Attachments
Issue Links
- is duplicated by
-
WICKET-4366 Dropping loading of 'AjaxLazyLoadPanels' by clicking 'AjaxFallbackLink' (with ajax-channel set to "AjaxChannel.Type.DROP"), still causes Component not found exception
-
- Resolved
-
-
WICKET-4470 problem with loading lazy components
-
- Resolved
-