Martin Hoegh
Martin Hoegh

Reputation: 475

Ext.data.HttpProxy callback on failure

I've the following ExtJS. The listener "write" is called when the response is a success (the response is JSON like: {"success":true,"message":"......"}). But how do I attach a callback when the response is not a success? ({"success":false,"message":"......"})

tableStructure.proxy = new Ext.data.HttpProxy({
        api: {
            read: '/controller/tables/' + screenName + '/getstructure/' + table,
            create: '/controller/tables/' + screenName + '/createcolumn/' + table,
            update: '/controller/tables/' + screenName + '/updatecolumn/' + table,
            destroy: '/controller/tables/' + screenName + '/destroycolumn/' + table
        },

        listeners: {
            write: tableStructure.onWrite
        }
    });

Upvotes: 1

Views: 5443

Answers (3)

ccpizza
ccpizza

Reputation: 31666

You can also set an exception handler on the Ext.data.Store wrapping the HttpProxy, provided that you send a response code other than 200.

    var store = new CQ.Ext.data.Store({
        proxy : new CQ.Ext.data.HttpProxy({
            method : "GET",
            url : '/some_url'
        }),
        reader : new CQ.Ext.data.JsonReader(),
        baseParams : {
            param : 'some value'
        }
    });

    store.on("beforeload", function() {
        CQ.Ext.getBody().mask("Please wait...", false);
    });

    store.on("exception", function() {
        CQ.Ext.getBody().unmask();
        CQ.Ext.Msg.show({
            title: 'Error',
            msg: '<span style="color:red">Bad request.</span><br/>',
            icon: CQ.Ext.Msg.ERROR,
            buttons: CQ.Ext.Msg.OK
        });
    });

Upvotes: 0

wes
wes

Reputation: 8175

You want to catch the HttpProxy's exception event.

    listeners: {
        write: tableStructure.onWrite
        exception: function(proxy, type, action, options, response, arg) {
            if(type === 'remote') { // success is false
                // do your error handling here
                console.log( response ); // the response object sent from the server
            }
        }
    }

You can find the full documentation in the Ext docs for Ext.data.HttpProxy down in the events section.

Upvotes: 4

Abdel Raoof Olakara
Abdel Raoof Olakara

Reputation: 19353

You should be able to make use of the write event itself. The write event's signature is: write(dataproxy,action,data,response,record,options).

You can access the success variable from the action object and check if the value is true or false. You should be able to access the success variable as:

action.result.success

You can do:

if(action.result.success != true ) {
  // If success is not true
} else {
  // If success is true
}

Upvotes: 0

Related Questions