Microsoft は POST で送信されるデータのサイズを制限しているため、フォームで送信されるデータの量が多い場合、エラーが報告されます (エラー ASP 0107: 80004005)。その理由は、Microsoft が Request.Form() を使用して受信できる最大データを 100K バイトに制限しているためです。この問題の解決策は、大きなデータを送信する必要があるドメインの場合、フォームを送信する前にデータを制限より小さいいくつかの部分に分割し、それらをいくつかの非表示フィールドに配置し、元のフィールドを同時にクリアします。フォームを正式に送信します。サーバーは依然として Request.Form() を使用して各非表示フィールドのデータを読み取り、それらを順番に結合します。メインのコードは次のとおりです。
注: 非表示フィールドを動的に挿入するには、フォームの HTML コード内で DIV を指定する必要があります。
====クライアントのサンプルコード====
<div id=divHidden></div> をフォームの HTML コードに追加します。 onSubmit=return fnPreHandle(this) を Form タグに追加します。以下のコードの BigField を、フォームを送信するフィールドに置き換えます。大きなデータベース名。
JavaScriptコード
次のようにコードをコピーします。
<スクリプト言語=javascript>
// データは分割され、対応する非表示ドメインに配置され、フォームの onSubmit イベントでトリガーされます。
関数 fnPreHandle(MyForm)
{
var iCount; // 分割するドメインの数
var strData; //元のデータ
var iMaxChars = 50000;//中国語の文字が 2 バイトであることを考慮すると、ドメイン内の最大文字数は 50K に制限されます
var iBottleNeck = 2000000; //記事が 200 万ワードを超える場合は、ユーザーにプロンプトを表示する必要があります。
var strHTML;
//元データ
strData = MyForm.BigField.value;
//記事が長すぎる場合は、ユーザーに通知する必要があります
if (strData.length > iBottleNeck)
{
if (confirm(公開したい記事は長すぎます。複数のパートに分けて別々に公開することをお勧めします。/nどうしても投稿する場合は、正常に送信するまでに時間がかかることに注意してください。/ n/n送信することを主張しますか?) == false )
false を返します。
}
iCount = parseInt(strData.length / iMaxChars) + 1;
//hdnCount は、元のデータ ドメインが分割されるサブドメインの数を記録します
strHTML = <入力タイプ=隠し名=hdnCount値= + iCount + >;
// サブドメインごとに HTML コードを生成します
for (var i = 1; i <= iCount; i++)
{
strHTML = strHTML + /n + <input type=hidden name=hdnBigField + i + >;
}
//各隠しフィールドの HTML コードをフォームの DIV (divHidden) に動的に挿入します
document.all.divHidden.innerHTML = strHTML;
//各サブフィールドに値を割り当てます
for (var i = 1; i <= iCount; i++)
{
MyForm.elements[hdnBigField + i].value = strData.substring((i - 1) * iMaxChars, i * iMaxChars);
}
//元のデータフィールドをクリアします
MyForm.BigField.value = ;
}
</script>
サーバーサイドのサンプルコード ASP/Visual Basic コード
次のようにコードをコピーします。
<%
ディム strData
Dim intFieldCount
ディムアイ
intFieldCount = リクエスト.フォーム(hdnCount)
i=1 の場合 intFieldCount へ
strData = strData & Request.Form(hdnBigfield & i)
次
Response.StrData の書き込み
%>