Answers:
在Apache下,该限制为可配置值LimitRequestLine
。如果要支持更长的请求URI,请将此值更改为大于其默认值8190的值。该值在/etc/apache2/apache2.conf中。如果不是,请LimitRequestLine 10000
在下添加新行()AccessFileName .htaccess
。
但是,请注意,如果您实际上要达到此限制,则可能一GET
开始就在滥用。您应该POST
用来传输这类数据-尤其是因为您甚至承认要使用它来更新值。如果您查看上面的链接,您会注意到Apache甚至说“在正常情况下,该值不应更改为默认值。”
POST
。使用POST并不会阻止您使用刚发布的字段填充相同的表单,因此我不确定您的意思。
LimitRequestLine
在httpd.conf文件中的任何位置找到该单词,只需在您喜欢的任何位置添加该行即可。例如:LimitRequestLine 100000
根据约翰的回答,我将GET请求更改为POST请求。它可以工作,而无需更改服务器配置。所以我去寻找如何实现这一点。以下页面是有帮助的:
带有PHP的jQuery Ajax POST示例 (注意清理发布的数据注释)和
http://www.openjs.com/articles/ajax_xmlhttp_using_post.php
基本上,区别在于GET请求在一个字符串中包含url和参数,然后发送null:
http.open("GET", url+"?"+params, true);
http.send(null);
而POST请求通过单独的命令发送url和参数:
http.open("POST", url, true);
http.send(params);
这是一个工作示例:
ajaxPOST.html:
<html>
<head>
<script type="text/javascript">
function ajaxPOSTTest() {
try {
// Opera 8.0+, Firefox, Safari
ajaxPOSTTestRequest = new XMLHttpRequest();
} catch (e) {
// Internet Explorer Browsers
try {
ajaxPOSTTestRequest = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
ajaxPOSTTestRequest = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
// Something went wrong
alert("Your browser broke!");
return false;
}
}
}
ajaxPOSTTestRequest.onreadystatechange = ajaxCalled_POSTTest;
var url = "ajaxPOST.php";
var params = "lorem=ipsum&name=binny";
ajaxPOSTTestRequest.open("POST", url, true);
ajaxPOSTTestRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
ajaxPOSTTestRequest.send(params);
}
//Create a function that will receive data sent from the server
function ajaxCalled_POSTTest() {
if (ajaxPOSTTestRequest.readyState == 4) {
document.getElementById("output").innerHTML = ajaxPOSTTestRequest.responseText;
}
}
</script>
</head>
<body>
<button onclick="ajaxPOSTTest()">ajax POST Test</button>
<div id="output"></div>
</body>
</html>
ajaxPOST.php:
<?php
$lorem=$_POST['lorem'];
print $lorem.'<br>';
?>
我刚发送了12,000个字符,没有任何问题。
我有一个简单的解决方法。
假设您的URI的字符串stringdata
太长。您可以根据服务器的限制将其分为多个部分。然后提交第一个文件,以我为例编写一个文件。然后提交下一个附加到先前添加的数据。
在从JQuery使用$ .getJSON()后,出现了此错误。我只是更改为发布:
data = getDataObjectByForm(form);
var jqxhr = $.post(url, data, function(){}, 'json')
.done(function (response) {
if (response instanceof Object)
var json = response;
else
var json = $.parseJSON(response);
// console.log(response);
// console.log(json);
jsonToDom(json);
if (json.reload != undefined && json.reload)
location.reload();
$("body").delay(1000).css("cursor", "default");
})
.fail(function (jqxhr, textStatus, error) {
var err = textStatus + ", " + error;
console.log("Request Failed: " + err);
alert("Fehler!");
});
RFC 2616的摘录:超文本传输协议-HTTP / 1.1:
该POST方法用来请求原始服务器接受被附在请求由请求URI中使用Request-Line标识的资源的新下属的实体。POST旨在允许采用统一的方法来覆盖以下功能:
- 注释现有资源;
- 将消息发布到公告板,新闻组,邮件列表或类似的文章组;
- 向数据处理过程提供数据块,例如提交表单的结果;
- 通过附加操作扩展数据库。