当前位置: 首页 > 知识库问答 >
问题:

使用PUT方法时无法检索JSON作为参数

焦正德
2023-03-14

我使用ExtJS来执行AJAX请求。这是我的密码

Ext.Ajax.request({
    url: 'TestServer',
    method: 'PUT',
    params: {
        json: Ext.encode({
            name: 'dummy'
        })
    }
});

所以我决定从servlet获取请求参数。所以我使用了

request.getParameter("json")

但是我得到一个空值。当我使用POST方法时,它工作得很好,但不是PUT。在使用 PUT 方法时,有没有其他方法可以在 servlet 中获取请求参数?

共有1个答案

叶光华
2023-03-14

来自Ext.Ajax 4.1文档:

method : String用于请求的默认HTTP方法。请注意,这是区分大小写的,应该全部大写(如果未设置,但参数存在,将使用“POST”,否则将使用“GET”)。)

文档没有提到允许 PUT,但也没有提到不允许 PUT。

此外,还有一些文档解释了如何使用 HTTP 方法重写使 servlet 调用服务映射到 PUT 或删除。

有人建议使用HTTP方法覆盖,而不是简单地直接使用PUT或DELETE,再加上Ext.Ajax文档省略了其他HTTP方法选项,这一事实强烈表明,使用Ext是不可能的。

这似乎很奇怪,考虑到这对于原始XmlHttpRequest甚至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)而不是使用参数,因为参数似乎不包含在覆盖/扩展操作中。此外,论坛中的一位发帖人提到,如果存在参数,则默认使用POST,无论指定了什么。因此,这是考虑改用 jsonData 的另一个原因。

如果jsonData不能满足您的需求,那么您可以始终遵循本代码示例作者演示的示例,修改Ext.Ajax副本,以便在提交参数时包含“PUT”请求。

 类似资料:
  • 我目前正在创建一个基于此小提琴的动态下拉列表 除了我试图调用JSON文件之外,我一直在跟进。我的代码如下: ]; 范围metro可以工作,但是当连接到JSON文件时,其余的就不能工作了。我假设它会工作,因为它实际上是相同的结构。我做错了什么? [编辑] 正如你们中的一些人所回答的那样,在我进行上述操作之前,我最初尝试了这种http注入: 这不起作用,所以我试了另一种方法。所以我假设它与JSON赋值

  • 问题内容: 我最近问了另一个(相关的)问题,这导致了后续问题: 通读jQuery.ajax()文档(http://api.jquery.com/jQuery.ajax/),似乎可接受的dataTypes列表不包含图像。 我正在尝试使用jQuery.get(如果需要的话,也可以使用jQuery.ajax)来检索图像,将此图像存储在Blob中,然后在POST请求中将其上传到另一台服务器。当前,由于数据

  • 我正在使用codeigniter rest服务器api库。 我进去的时候http://localhost/RESTapi/api/question?X-API-KEY=XXX在Postman中使用我得到的PUT方法:{“status”:false,“error”:“无效的API键”} 它与GET方法配合得很好如何解决此问题?

  • 作为一个应用程序的一部分,我正在工作,我想提供一个假期列表。我试图使用谷歌API来做到这一点。在编写代码之前,我只想看看返回的JSON是什么样子的。 我在谷歌建立了一个帐户,得到了一个API密钥,并被设置为使用谷歌日历API。我对获取假期列表所需的HTML进行了研究,但似乎无法使其工作。我浏览了所有的日历API文档,但没有找到任何关于检索假日列表的内容。以下是我尝试的一些URL和收到的回复。我在网

  • 我正在使用演示APi(http://dummy.restapiexample.com/update) 我有一个响应类UpdateResponse 我有一个Api类和一个APIInterface 和对话框而不是主活动 在APIInterface中使用PUT方法有一个@path(id)和三个@fields(name、salary、age) 下面是UpdateResponse类代码 Api接口代码如下

  • 问题内容: 我正在寻找一种通过引用传递方法的方法。我知道Java不会将方法作为参数传递,但是,我想找到一种替代方法。 有人告诉我接口是将方法作为参数传递的替代方法,但我不了解接口如何通过引用充当方法。如果我理解正确,那么接口就是一组未定义的抽象方法。我不想发送每次都需要定义的接口,因为几种不同的方法可以使用相同的参数调用同一方法。 我要完成的工作与此类似: 调用如: 问题答案: 编辑:从Java