Ok, I've found a way to ignore cancel requests from the client. I'm
posting it here in case someone finds it useful. I still would love
someone explaining my previous questions, but at least I'm able to
continue the development.

The general idea is to use a datasource id in the browser, and store a
request id that will increment each time a new Query.send() is done
(or if the user hits the "cancel" buttom). So here it is (please
excuse any syntax/error, this is just an extract of my code with the
lines that explains what I did):


// prototype class for storing google query objects
var GQuery = Class.create({
        initialize: function(){
                this.gtables = [];
                this.gqueries = [];
                this.last_request = [];
        },
        createGoogleTable: function(datasourceID,parent_div) {
                // create the Google Visualization Table
                this.gtables[datasourceID] = new google.visualization.Table($
(parent_div));
                // create the google Query object
                this.gqueries[datasourceID] = new google.visualization.Query(
                        'YOUR_URL_HERE?p_datasource_id='+datasourceID
                );
                // create an entry to track it's calls (so we can cancel future
calls)
                this.last_request[datasourceID] = {
                        "id": 0,
                        "waiting": false
                }
                // run the query!
                this.refreshGoogleTable(datasourceID);
        },
        refreshGoogleTable: function(id) {
                var this_request = this.last_request[id].id;
                // check for currently running request for the same datasource
                if (this.last_request[id].waiting) {
                        // found one running
                        alert(  'We are processing a previous request. '+
                                'Please wait or cancel it before trying 
again.'));
                        return false;
                } else {
                        // set the new run session!
                        this.last_request[id].id += 1;
                        this.last_request[id].waiting = true;
                }
                this.gqueries[id].send( function(response) {
                        if (this_request < query.last_request[id].id) {
                                // old datasource was canceled, do nothing.
                                return false;
                        }
                        if (response.isError()) {
                                alert('Error found: ' + response.getMessage());
                        } else {
                                // redraw the table
                                query.gtables[id].draw(response.getDataTable());
                                // clean loading flag
                                query.last_request[id].waiting = false;
                        };
                });
        },
        cancelGoogleTable: function(id) {
                // set a new request id so that the handler ignores the 
previous one
                run.last_request[id].id += 1;
                run.last_request[id].waiting = false;
        }
});
// instantiate and use it!
query = new GQuery;
query.create('datasourceid','parent_div_id');
// then just call refresh or cancel methods as you wish in your page


Regards,
Jose.

On Jun 3, 12:14 pm, Jose Luis Canciani <[email protected]>
wrote:
> I'm still trying to make this work. I've ignored the first option
> because I've read in the forums that we should not modify the tqx
> parameters.
> So I'm concentrating in the second option but still having problems. I
> can manually change the query by modifying the Da attribute
> (query_object.Da), but it doesn't help since I cannot receive a custom
> parameter in the response. The response object ignores any custom
> parameters sent in the JSON from the server.
>
> So still trying to control this. I've been testing a bit more with two
> different handlers in each call to send(). But I find out that if I
> sent two queries (query.send()) one after the other, then only the
> first one call the response handler. The second one does nothing (I do
> see the two request did get out of the client with Firebug). Can
> someone explain why this happen?
>
> Thanks,
> Jose.
>
> On Jun 2, 6:37 pm, Jose Luis Canciani <[email protected]> wrote:
>
> > Hello. I'm building a UI that will let a user run a query dynamically
> > and also cancel it if it's taking to long or if he/she wants to run it
> > again with a different filter for example. I'm having troubles to
> > ignore the previous call from the client. I see two possible solutions
> > but I'm not sure how to implement them:
>
> > 1) If I could make reqId to increase with every new call to the send()
> > method of the Query object then I could ignore previous calls in my
> > handler function. But I don't know how to do that: when calling the
> > send method the reqId always stay in "0".
>
> > 2) I can create a new query object and pass a custom reqId in the URL.
> > That would make the trick, but I don't want to have to create a new
> > object every time. Is it possible to change the URL of a query object
> > once it was instantiated?
>
> > Any other approach would be appreciated.
>
> > Thanks!
> > Jose.
>
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Google Visualization API" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/google-visualization-api?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to