Когда Расширение, проблемы a JS УДАЛЯЮТ запрос из успокоительного хранилища, он включает тело объекта. Хотя это, кажется, не запрещается спецификацией HTTP, Google App Engine не принимает такие запросы. Таким образом, я хотел бы знать, существует ли способ препятствовать тому, чтобы успокоительное хранилище включало избыточное тело объекта в, УДАЛЯЮТ запросы.
Подробнее:
Используя этот образец как ссылка: http://www.sencha.com/deploy/dev/examples/restful/restful.html
Это - то, как хранилище определяется:
var store = new Ext.data.Store({
id: 'user',
restful: true, // <-- This Store is RESTful
proxy: proxy,
reader: reader,
writer: writer
});
После нажатия кнопки "Delete" это - Расширение запроса, которое отправляет JS:
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}
Когда запрос в этом формате (с содержанием "данных") отправлен к Google App Engine, это отвечает с:
400 Bad Request
Вы можете решить эту проблему, как вы догадались, переопределив метод в классе HttpProxy. Сначала добавьте этот код:
// 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);
}
});
Затем используйте этот новый класс («GAEHttpProxy») вместо HttpProxy в остальной части кода (например, при создании прокси-сервера, который вы используете в своем магазине, показанном выше). Это сработало для меня, и я надеюсь, что это сработает для вас!