سؤال

ExtJS version: 3.2.1 (I know it's old... I cannot change this yet)

I am trying to prevent ajax calls once a user's authentication is no longer valid (either timed out or logged out)

When I override Ext.Ajax.response globally, that gets overwritten when I create a new Ext.Ajax call.

Ext.override(Ext.Ajax.request, {
    success: function(response, opts) {
        console.log('Override function');
        /* redirects to login page */
    }
});

/* lots of other code */

Ext.Ajax.request({
    url: '/my_ajax_url',
    params: {type: 'producer'},
    success: function(r) {
        console.log('my function that does lots of stuff');
    }
});

I am trying to prevent myself from going through hundreds of files (130MB of nothing but code) changing all Ext.Ajax and Ext.data.JsonStore instances to call some sort of 'parent' function before everything.

I have also tried changing the response from returning a JSON object to returning an http error "HTTP/1.1 419 Authentication Timeout". I think this should be the way to go but I cannot get the 419 error to be 'caught' (I don't know exactly what to override to achieve this.)

هل كانت مفيدة؟

المحلول

There are a couple of events on Ext.Ajax, where you can attach global listeners.

To prevent requests from being fired you can use beforerequest and return false in your listener:

Ext.Ajax.on({
    'beforerequest': function() {
        if (!loggedIn) {
            return false; // prevents request
        }
    }
});

There's also requestcomplete and requestexception, where you could check for the HTTP status code (don't know which of the two a HTTP 419 would fire):

Ext.Ajax.on({
    'requestcomplete': function(conn, response) {
        if (response.status == 419) {
            // redirection to login page
        }
    }
});

(documentation links are for 3.4.0, but all events should be available in 3.2.1 as well)

Edit: Documentation for ExtJS v3.2.1

نصائح أخرى

request is a method, so you can't override it in that fashion. Instead, you want something like this (untested):

var original = Ext.Ajax.request;
Ext.Ajax.request = function() {
    if (everythingIsFine) {
        original.apply(Ext.Ajax, arguments);
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top