如何防止ExtJS在使用restful存储的删除请求中包含实体体?
当ExtJS从restful存储发出删除请求时,它包含一个实体体。虽然这是HTTP规范规定的,但Google应用程序引擎不接受此类请求。因此,我想知道是否有办法防止restful存储在删除请求中包含冗余实体体 详细信息: 使用此示例作为参考: 这是存储的定义方式:如何防止ExtJS在使用restful存储的删除请求中包含实体体?,rest,extjs,Rest,Extjs,当ExtJS从restful存储发出删除请求时,它包含一个实体体。虽然这是HTTP规范规定的,但Google应用程序引擎不接受此类请求。因此,我想知道是否有办法防止restful存储在删除请求中包含冗余实体体 详细信息: 使用此示例作为参考: 这是存储的定义方式: var store = new Ext.data.Store({ id: 'user', restful: true, // <-- This Store is RESTful proxy: p
var store = new Ext.data.Store({
id: 'user',
restful: true, // <-- This Store is RESTful
proxy: proxy,
reader: reader,
writer: writer
});
当此格式的请求(包含“数据”内容)提交到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(例如,当您在上面显示的存储中创建代理时)。这对我有用,我希望对你有用 虽然这个问题是7年前提出来的,现在我们有了sencha 6,但这个问题还没有解决。下面是我的工作解决方案:
Ext.define('My.Proxy', {
extend: 'Ext.data.proxy.Rest',
writer: {
type: 'json',
writeAllFields: true, // may be false, as you wish
transform: {
fn: function(data, request) {
return request.config.action === 'destroy' ? null : data;
},
scope: this
}
}
});
我们也可以执行此检查:
request.config.method==='DELETE'
,但由于某些原因,它总是返回false。所以我建议继续使用action==='destroy'
Awesome,这确实有效。我在appengine上测试了它。非常感谢,您不仅发布了解决问题的干净代码,还演示了如何自定义代理。干得好。这似乎不适用于ExtJS4。doRequest现在有操作、回调、作用域
参数。@CoderDennis也无法将此答案应用于Ext JS 4,因此将其作为一个单独的问题发布:最终通过使用Ajax拦截器找到了一个解决方法,无论使用的框架如何,它都能工作。相关:
Ext.define('My.Proxy', {
extend: 'Ext.data.proxy.Rest',
writer: {
type: 'json',
writeAllFields: true, // may be false, as you wish
transform: {
fn: function(data, request) {
return request.config.action === 'destroy' ? null : data;
},
scope: this
}
}
});