Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 来自Mongrel的错误:“quot;HTTP元素请求“路径长于1024允许长度”;_Ruby_Http_Mongrel - Fatal编程技术网

Ruby 来自Mongrel的错误:“quot;HTTP元素请求“路径长于1024允许长度”;

Ruby 来自Mongrel的错误:“quot;HTTP元素请求“路径长于1024允许长度”;,ruby,http,mongrel,Ruby,Http,Mongrel,我有一个网站,在运行Mongrel的服务器上运行查询。查询语法可能非常复杂,我刚刚运行了一个查询(HTTP请求),它产生了这个错误 欢迎所有解决方法 编辑:下面是完整的ajax命令: $.ajax({ type: "POST", url: '/parsequery/' + jsonQuery, beforeSend: function(x) { // this is needed because otherwise jquery doesn

我有一个网站,在运行Mongrel的服务器上运行查询。查询语法可能非常复杂,我刚刚运行了一个查询(HTTP请求),它产生了这个错误

欢迎所有解决方法

编辑:下面是完整的ajax命令:

 $.ajax({
        type: "POST",
        url:    '/parsequery/' + jsonQuery,
        beforeSend: function(x) { // this is needed because otherwise jquery doesn't see the returned data as json
            if(x && x.overrideMimeType) {
                x.overrideMimeType("text/html");
            }
        },
        datatype: 'json',
        success: function(data, textStatus) {
            if (parsedOK(data)) {
                executeQuery(jsonQuery);
            }
            else {
                handleFailedParse(data);
            }

        },
        error:  function(jaXHR, textStatus, errorThrown) {
            alert("error sending request: " + textStatus)
        }

    });

您应该使用HTTPPOST来实现这一点。许多服务器和浏览器实现对查询长度有严格限制,大约为1kbyte或2kbyte

所以不是

<form action="http://www.example.org/foo" method="get">
有关示例,请参见此处:


当然,服务器端需要处理POST请求。但是从编程的角度来看,在服务器端从GET到POST的更改应该是微不足道的。

好的,您能给出POST请求如何触发的更多细节吗?如何提供参数?即使使用post,参数也可能通过“get part”传输,即通过URL传输,而不是通过正文传输。我刚刚将我正在使用的ajax命令添加到我的原始post中。谢谢你的帮助。上面查询的问题是:你明确地将它粘贴到URL中,所以URL部分变得很长。您应该做的是:将
/parsequery/foo/bar?param1=abc¶m2=def
转换为
$.ajax(url:“/parsequery/foo/bar”,…,数据:{param1:“abc”,param2:“def”},…)
。通过这种方式,参数通过http正文传输,您实际上利用了POST请求的大发送负载。
beforeSend
应该是不必要的。我认为您只需要将
数据类型:“json”
更改为
数据类型:“json”
<form action="http://www.example.org/foo" method="post">
$.post("/foo", {"param1": "foo", "param2": "bar"}, function(data) {
  alert("post successful!");
});