我正在尝试使用jquery.ajax
方法将JavaScript变量传递到服务器端。
我正在尝试创建一个json字符串,但是当变量的长度达到10000时,不会再向该字符串附加数据。
var jsonObj = '{"code":"' + code + '","defaultfile":"' + defaultfile + '","filename":"' + currentFile + '","lstResDef":[';
$.each(keys, function(i, item) {
i = i + 1;
var value = $("#value" + i).val();
var value = value.replace(/"/g, "\\\"");
jsonObj = jsonObj + '{';
jsonObj = jsonObj + '"Key":' + '"' + Encoder.htmlEncode($(this).html()) + '"' + "," + '"Value"' + ':' + '"' + Encoder.htmlEncode(value) + '"';
jsonObj = jsonObj + '},';
alert(jsonObj);
});
jsonObj = jsonObj + ']}';
这里,当var jsonObj的字符长度为10000时,不会追加其后的值。
看起来有一些限制。
答案 0 :(得分:65)
字符串长度没有这样的限制。确定,我刚测试创建一个包含60兆字节的字符串。
问题可能是您在GET请求中发送数据,因此它是在URL中发送的。不同的浏览器对URL有不同的限制,其中IE具有约2kB的最低限制。为了安全起见,您不应该在GET请求中发送超过大约一千字节的数据。
要发送那么多数据,您必须在POST请求中发送它。浏览器对帖子的大小没有硬性限制,但服务器对请求的大小有限制。例如,IIS的默认限制为4 MB,但如果您需要发送更多数据,则可以调整限制。
此外,您不应该使用+ =来连接长字符串。对于每次迭代,都有越来越多的数据需要移动,因此您拥有的项目越多越慢。将字符串放在一个数组中,并立即连接所有项目:
var items = $.map(keys, function(item, i) {
var value = $("#value" + (i+1)).val().replace(/"/g, "\\\"");
return
'{"Key":' + '"' + Encoder.htmlEncode($(this).html()) + '"' + ",'+
'" + '"Value"' + ':' + '"' + Encoder.htmlEncode(value) + '"}';
});
var jsonObj =
'{"code":"' + code + '",'+
'"defaultfile":"' + defaultfile + '",'+
'"filename":"' + currentFile + '",'+
'"lstResDef":[' + items.join(',') + ']}';
答案 1 :(得分:8)
步骤1始终首先确定问题所在。您的标题和大多数问题似乎表明您在JavaScript /浏览器中的字符串长度上遇到了相当低的长度限制,这是一个不可思议的低限制。你不是。考虑:
var str;
document.getElementById('theButton').onclick = function() {
var build, counter;
if (!str) {
str = "0123456789";
build = [];
for (counter = 0; counter < 900; ++counter) {
build.push(str);
}
str = build.join("");
}
else {
str += str;
}
display("str.length = " + str.length);
};
反复单击相关按钮会使字符串更长。使用Chrome,Firefox,Opera,Safari和IE,我对使用超过一百万个字符的字符串没有任何问题:
str.length = 9000 str.length = 18000 str.length = 36000 str.length = 72000 str.length = 144000 str.length = 288000 str.length = 576000 str.length = 1152000 str.length = 2304000 str.length = 4608000 str.length = 9216000 str.length = 18432000
......而且我很确定我的很多比这更高。
所以这与JavaScript中的长度限制无关。您没有显示将数据发送到服务器的代码,但很可能您使用的是GET
,这意味着您遇到了GET请求的长度限制,因为GET
参数是放入查询字符串。 Details here
您需要切换为使用POST
。在POST
请求中,数据位于请求正文中而不是URL中,并且确实非常非常大。
答案 2 :(得分:-9)
你必须把它放在web.config中:
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="50000000" />
</webServices>
</scripting>
</system.web.extensions>