Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I prevent Ext JS from including an entity body in DELETE requests using a restful store?

Tags:

rest

extjs

When Ext JS issues a DELETE request from a restful store, it includes an entity body. Although this doesn't seem to be forbidden by the HTTP spec, Google App Engine doesn't accept such requests. So I'd like to know if there is a way to prevent a restful store from including a redundant entity body on DELETE requests.

Details:

Using this sample as reference: http://www.sencha.com/deploy/dev/examples/restful/restful.html

This is how the store is defined:

var store = new Ext.data.Store({
    id: 'user',
    restful: true,     // <-- This Store is RESTful
    proxy: proxy,
    reader: reader,
    writer: writer
});

After pressing the "Delete" button, this is the request Ext JS sends:

DELETE http://www.sencha.com/deploy/dev/examples/restful/app.php/users/6 HTTP/1.1
Host: www.sencha.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; pt-BR; rv:1.9.2.4) Gecko/20100611 Firefox/3.6.4 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: pt-br,pt;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Content-Type: application/json; charset=UTF-8
X-Requested-With: XMLHttpRequest
Referer: http://www.sencha.com/deploy/dev/examples/restful/restful.html
Content-Length: 10
Cookie: bb_sessionhash=8d75f5e42d576fb695a02bf1d24c9ff1; etc...

{"data":6}

When a request in this format (with the "data" content) is submitted to Google App Engine, it replies with:

400 Bad Request
like image 474
Fernando Correia Avatar asked Jun 25 '10 15:06

Fernando Correia


People also ask

What are the advantages of using Ext JS?

Though you can utilize JQuery or something similar, Ext JS's advantage lies in multiple UI components that go along with it. The main purpose of the Ext JS framework is to allow developers to design perfect and scalable web apps.

How does Javascript ext work?

It has the path defined for all the other files used in that application such as store, view, model, require, mixins. View. js − It contains the interface part of the application, which shows up to the user. Ext JS uses various UI rich views, which can be extended and customized here according to the requirement.

What is proxy in ExtJs?

In ExtJs have store proxy and also Ajax request you can use both. Proxies are used by Ext. data. Store to handle the loading and saving of Ext. data.


1 Answers

You can fix this problem, as you guessed, by overriding a method in the HttpProxy class. First, add this code:

// Special HttpProxy that sends no body on DELETE requests
Ext.data.GAEHttpProxy = Ext.extend(Ext.data.HttpProxy, {
doRequest: function(action, rs, params, reader, cb, scope, arg) {
    if(this.api[action]['method'].toLowerCase() == "delete") {
        delete params.jsonData;
    }

    Ext.data.GAEHttpProxy.superclass.doRequest.call(this, action, rs, params, reader, cb, scope, arg);
}
});

Then, use this new class ("GAEHttpProxy") instead of HttpProxy in the rest of your code (for instance, when you create the proxy you use in your store shown above). This worked for me, and I hope it works for you!

like image 167
EasyArray Avatar answered Oct 30 '22 18:10

EasyArray