You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by "Martin Grigorov (JIRA)" <ji...@apache.org> on 2012/07/23 15:26:34 UTC
[jira] [Resolved] (WICKET-4665) Add a new AjaxChannel that discards
any Ajax requests if there is a running request in the same channel
[ https://issues.apache.org/jira/browse/WICKET-4665?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Martin Grigorov resolved WICKET-4665.
-------------------------------------
Resolution: Fixed
Fix Version/s: 1.5.8
6.0.0
> Add a new AjaxChannel that discards any Ajax requests if there is a running request in the same channel
> -------------------------------------------------------------------------------------------------------
>
> Key: WICKET-4665
> URL: https://issues.apache.org/jira/browse/WICKET-4665
> Project: Wicket
> Issue Type: Bug
> Components: wicket
> Affects Versions: 6.0.0-beta3
> Reporter: Christian Oldiges
> Assignee: Martin Grigorov
> Fix For: 6.0.0, 1.5.8
>
>
> 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 {
> return callback();
> } 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') { // stack
> this.callbacks.push(callback);
> }
> 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.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira