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の場合、それに続く値は追加されません。
それにはいくつかの制限があるようです。
文字列の長さにそのような制限はありません。確かに、60メガバイトを含む文字列を作成するためにテストしました。
問題は、GETリクエストでデータを送信している可能性が高いため、URLで送信されることです。ブラウザーごとにURLの制限が異なります。IEの最低制限は約2 kBです。安全のために、GETリクエストで約1キロバイトを超えるデータを送信しないでください。
大量のデータを送信するには、代わりに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では、常に最初に問題の場所を特定します。あなたのタイトルとあなたの質問のほとんどは、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を使用して、100万文字を超える文字列でも問題なく使用できました。
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
...そして、lotがそれよりも高くなると確信しています。
したがって、JavaScriptの長さ制限とは関係ありません。サーバーにデータを送信するためのコードを表示していませんが、GET
を使用している可能性が高いです。つまり、GET
パラメータはクエリ文字列に入れられます。 詳細はこちら 。
代わりにPOST
を使用するように切り替える必要があります。 POST
リクエストでは、データはURLではなくリクエストの本文にあり、実際には非常に大きい場合があります。