我使用ExtJS执行AJAX请求。这是我的代码
Ext.Ajax.request({
url: 'TestServer',
method: 'PUT',
params: {
json: Ext.encode({
name: 'dummy'
})
}
});
所以我决定从servlet获取request参数。所以我已经使用了
request.getParameter("json")
但我得到一个空值。当我使用POST方法时它很好用,但不是PUT。在使用PUT方法时,有没有其他方法可以在servlet中获取请求参数?
答案 0 :(得分:1)
方法:字符串 用于请求的默认HTTP方法。请注意,这是区分大小写的,应该是全部大写(如果没有设置但是params存在将使用“POST”,否则将使用“GET”。)
文档没有提到允许PUT,但它也没有提到禁止PUT。
此外,还有一些文档说明如何使用HTTP Method Override使servlet调用映射到PUT或DELETE的服务。
有人会建议使用HTTP方法覆盖,而不是简单地直接使用PUT或DELETE,再加上Ext.Ajax文档,省略其他HTTP方法选项,这强烈暗示你要做的事情是不可能使用Ext
这看起来很奇怪,考虑到原始XmlHttpRequests甚至jQuery AJAX都是可能的。
但是,利用JavaScript的动态类型和功能特性,可以使用this forum post中的代码轻松覆盖/扩展默认的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似乎不包含在覆盖/扩展操作中。此外,论坛中的一张海报提到如果存在params,默认情况下使用POST,无论指定什么。因此,这是考虑使用jsonData的另一个原因。
如果jsonData不能满足您的需求,那么您可以始终遵循此代码示例的作者演示的示例,并修改Ext.Ajax的副本,以便在提交params时包含“PUT”请求。