来自Ext.Ajax 4.1 文档:
method : String 用于请求的默认 HTTP 方法。请注意,这是区分大小写的并且应该全部大写(如果未设置但参数存在将使用“POST”,否则将使用“GET”。)
该文档没有提到允许 PUT,但也没有提到不允许 PUT。
此外,还有说明如何使用HTTP 方法覆盖来使 servlet 调用映射到 PUT 或 DELETE 的服务的文档。
有人建议使用 HTTP Method Override 而不是直接使用 PUT 或 DELETE,再加上 Ext.Ajax 文档省略了其他 HTTP Method 选项,这一事实强烈表明您尝试使用 Ext 是不可能的。
这看起来很奇怪,考虑到原始 XmlHttpRequests 甚至 jQuery AJAX 都非常有可能。
但是,利用 JavaScript 的动态类型和功能特性,可以使用来自此论坛帖子的代码轻松覆盖/扩展默认 Ajax 功能:
Ext.lib.Ajax.request = function(method, uri, cb, data, options) {
if(options){
var hs = options.headers;
if(hs){
for(var h in hs){
if(hs.hasOwnProperty(h)){
this.initHeader(h, hs[h], false);
}
}
}
if(options.xmlData){
this.initHeader('Content-Type', 'text/xml', false);
method = (options.method == 'PUT' ? 'PUT' : 'POST');
data = options.xmlData;
}else if(options.jsonData){
this.initHeader('Content-Type', 'text/javascript', false);
method = (options.method == 'PUT' ? 'PUT' : 'POST');
data = typeof options.jsonData == 'object' ? Ext.encode(options.jsonData) : options.jsonData;
}
}
return this.asyncRequest(method, uri, cb, data);
};
// example request
Ext.Ajax.request({
url: 'testrest.php',
method: 'PUT',
headers: {'Content-Type': 'text/xml'},
success: function(response, opts) { Ext.Msg.alert('Sucess', 'Update has been successful'); },
xmlData: '<blah>de</blah>'
});
最后,也不清楚您使用的是哪个版本的 Ext,上面的代码示例来自 2007。您可能需要修改您的 AJAX 请求,以便它使用 jsonData(代替它们的 xmlData)而不是使用 params,作为 params似乎没有包含在覆盖/扩展操作中。此外,论坛中的一位发帖人提到,如果存在参数,则默认使用 POST,无论指定什么。因此,这是另一个考虑使用 jsonData 的原因。
如果 jsonData 不能满足您的需求,那么您始终可以按照此代码示例的作者演示的示例并修改您的 Ext.Ajax 副本,以便在提交参数时包含“PUT”请求。