2012-10-21 35 views
0

我有一个网站在运行Mongrel的服务器上运行查询。查询语法可能会相当复杂,而我只是运行了一个查询(HTTP请求),导致了这个错误。来自Mongrel的错误:“HTTP元素REQUEST_PATH长于允许的1024长度”

欢迎使用所有解决方法。

编辑:下面是完整的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) 
     } 

    }); 
+0

'beforeSend'不应该是必要的。我想你只是需要改变'数据类型:'json'到'dataType:'json'' – Philip

回答

2

您应该使用HTTP POST了点。许多服务器和浏览器实现对查询长度有严格的限制,约1KB或2KB。

所以不是

<form action="http://www.example.org/foo" method="get"> 

你应该做的

<form action="http://www.example.org/foo" method="post"> 

而如果你不这样做通过形式的要求,你可以使用jQuery例如:

$.post("/foo", {"param1": "foo", "param2": "bar"}, function(data) { 
    alert("post successful!"); 
}); 

请看这里的例子:http://api.jquery.com/jQuery.post/

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

+0

不幸的是,我已经在使用后,没有得到。 – davej

+0

好的,你可以提供更多的细节如何解雇发布的请求吗?你如何提供参数?即使使用post,参数也可以通过“获取部分”来传输,即通过URL而不通过主体。 – Philip

+0

我刚刚将我使用的ajax命令添加到原始帖子中。谢谢你的帮助。 – davej

相关问题