longitud length data javascript variable-length

length - javascript object max size limit



size of a string js (3)

Estoy tratando de pasar una variable de JavaScript al lado del servidor usando el método jquery.ajax .

Intento crear una cadena json, pero cuando la longitud de la variable llega a 10000, no se añaden más datos a la cadena.

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 + '']}'';

Aquí, cuando la longitud de caracteres de var jsonObj es 10000, los valores siguientes no se anexan.

Parece que hay un límite sobre eso.


El paso 1 siempre es primero determinar dónde se encuentra el problema. Su título y la mayor parte de su pregunta parecen sugerir que se encuentra con un límite de longitud bastante bajo en la longitud de una cadena en JavaScript / en navegadores, un límite increíblemente bajo. Tu no eres. Considerar:

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); };

Copia en vivo

Al hacer clic repetidamente en el botón correspondiente se alarga la cadena. Con Chrome, Firefox, Opera, Safari e IE, no he tenido problemas con cadenas de más de un millón de caracteres:

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

... y estoy bastante seguro de que podría obtener mucho más que eso.

Por lo tanto, no tiene nada que ver con un límite de longitud en JavaScript. No ha mostrado su código para enviar los datos al servidor, pero lo más probable es que esté usando GET que significa que se está ejecutando en el límite de longitud de una solicitud GET, porque los parámetros GET se ponen en la cadena de consulta. Detalles aquí .

Necesita cambiar a usar POST lugar. En una solicitud POST , los datos están en el cuerpo de la solicitud en lugar de en la URL, y pueden ser realmente muy grandes.


No existe tal límite en la longitud de la cuerda. Para estar seguro, acabo de probar para crear una cadena que contenga 60 megabytes.

Es probable que envíe los datos en una solicitud GET, por lo que se envía en la URL. Los diferentes navegadores tienen diferentes límites para la URL, donde IE tiene la limitación más baja de alrededor de 2 kB. Para estar seguro, nunca debe enviar más datos de aproximadamente un kilobyte en una solicitud GET.

Para enviar esa cantidad de datos, debe enviarlos en una solicitud POST. El navegador no tiene un límite estricto en el tamaño de una publicación, pero el servidor tiene un límite en la cantidad de solicitudes. IIS, por ejemplo, tiene un límite predeterminado de 4 MB, pero es posible ajustar el límite si alguna vez necesita enviar más datos que eso.

Además, no debe usar + = para concatenar cadenas largas. Para cada iteración hay más y más datos para mover, por lo que cada vez se vuelven más y más lentos. Coloque las cadenas en una matriz y concatene todos los elementos a la vez:

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('','') + '']}'';


tienes que poner esto en web.config:

<system.web.extensions> <scripting> <webServices> <jsonSerialization maxJsonLength="50000000" /> </webServices> </scripting> </system.web.extensions>