无正文的 HTTP DELETE 请求
HTTP DELETE request without body
我面临与上述相同的问题 here:我正在尝试将我的 ExtJS 4.1 存储与 REST API 连接,但是当我从存储中删除记录并因此调用 HTTP DELETE 时方法,它被服务器端拒绝,因为 ExtJS 发送的 HTTP 请求包含正文。不幸的是,上面 link 上接受的答案对 ExtJS 版本 4 及更高版本无效。
目前为止我做的最好的就是将空数组(字面意思是 [] )作为一个主体发送,但是当然这仍然被拒绝了:
这是我的代码:
Ext.define('TT.proxy.CustomRestProxy', {
alias: 'proxy.customrestproxy',
extend: 'Ext.data.proxy.Rest',
buildRequest: function(operation) {
var request = this.callParent(arguments);
if(operation.action === 'destroy')
{
delete request.operation.records;
}
return request;
}
});
defineStore = function(storeName, modelName, url) {
var storeProperties = {
extend: 'Ext.data.Store',
requires: modelName,
model: modelName,
id: storeName,
proxy: {
type: 'customrestproxy',
url: url,
batchActions: false,
noCache: false,
headers: { 'Content-Type': 'application/json' },
reader: {
type : 'json',
totalProperty: 'total',
successProperty: 'success',
root: 'data'
},
writer: {
type : 'json'
},
}
};
Ext.define(storeName, storeProperties);
};
我会接受任何解决此问题的答案,它不必包含 ExtJS 特定的功能,即拦截 AJAX 请求或类似技术也是受欢迎的。
有一个基于 AJAX 拦截器的解决方法,灵感来自 this link。无论使用什么框架,这段代码都能解决问题,因此它对其他不一定使用 Ext JS 的人也很有用:
(function(XHR) {
"use strict";
var open = XHR.prototype.open;
var send = XHR.prototype.send;
var httpMethod;
XHR.prototype.open = function(method, url, async, user, pass) {
httpMethod = method;
this._url = url;
open.call(this, method, url, async, user, pass);
};
XHR.prototype.send = function(data) {
if(httpMethod === 'DELETE')
{
data = null;
}
send.call(this, data);
}
})(XMLHttpRequest);
我面临与上述相同的问题 here:我正在尝试将我的 ExtJS 4.1 存储与 REST API 连接,但是当我从存储中删除记录并因此调用 HTTP DELETE 时方法,它被服务器端拒绝,因为 ExtJS 发送的 HTTP 请求包含正文。不幸的是,上面 link 上接受的答案对 ExtJS 版本 4 及更高版本无效。
目前为止我做的最好的就是将空数组(字面意思是 [] )作为一个主体发送,但是当然这仍然被拒绝了:
这是我的代码:
Ext.define('TT.proxy.CustomRestProxy', {
alias: 'proxy.customrestproxy',
extend: 'Ext.data.proxy.Rest',
buildRequest: function(operation) {
var request = this.callParent(arguments);
if(operation.action === 'destroy')
{
delete request.operation.records;
}
return request;
}
});
defineStore = function(storeName, modelName, url) {
var storeProperties = {
extend: 'Ext.data.Store',
requires: modelName,
model: modelName,
id: storeName,
proxy: {
type: 'customrestproxy',
url: url,
batchActions: false,
noCache: false,
headers: { 'Content-Type': 'application/json' },
reader: {
type : 'json',
totalProperty: 'total',
successProperty: 'success',
root: 'data'
},
writer: {
type : 'json'
},
}
};
Ext.define(storeName, storeProperties);
};
我会接受任何解决此问题的答案,它不必包含 ExtJS 特定的功能,即拦截 AJAX 请求或类似技术也是受欢迎的。
有一个基于 AJAX 拦截器的解决方法,灵感来自 this link。无论使用什么框架,这段代码都能解决问题,因此它对其他不一定使用 Ext JS 的人也很有用:
(function(XHR) {
"use strict";
var open = XHR.prototype.open;
var send = XHR.prototype.send;
var httpMethod;
XHR.prototype.open = function(method, url, async, user, pass) {
httpMethod = method;
this._url = url;
open.call(this, method, url, async, user, pass);
};
XHR.prototype.send = function(data) {
if(httpMethod === 'DELETE')
{
data = null;
}
send.call(this, data);
}
})(XMLHttpRequest);