It took me a long time to figure it out. Ext.Ajax.abort(request) is able to abort requests. But it is pretty hard to get the current request object (or better, the request object Ext.Ajax.abort needs) from a store.
Finally I got this:
...
if (store.loading && store.lastOperation) {
var requests = Ext.Ajax.requests;
for (id in requests)
if (requests.hasOwnProperty(id) && requests[id].options == store.lastOperation.request) {
Ext.Ajax.abort(requests[id]);
}
}
store.on('beforeload', function(store, operation) {
store.lastOperation = operation;
}, this, { single: true });
store.load();
...
Not nice but lasting store loads are reliably canceled.