javascript对象最大大小限制

Par*_*ras 37 javascript variable-length

我正在尝试使用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 + ']}';
Run Code Online (Sandbox Code Playgroud)

这里,当var jsonObj的字符长度为10000时,不附加其后的值.

看起来有一些限制.

Guf*_*ffa 68

字符串长度没有这样的限制.确定,我刚测试创建一个包含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(',') + ']}';
Run Code Online (Sandbox Code Playgroud)

  • +1 - 没有意识到`+ =`的性能低于数组`.join()` (7认同)

T.J*_*der 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);
};
Run Code Online (Sandbox Code Playgroud)

实时复制

反复单击相关按钮会使字符串更长.使用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参数放在查询字符串中.细节在这里.

您需要切换到使用POST.在POST请求中,数据位于请求的主体中而不是URL中,并且确实非常非常大.