نظرًا لأن Microsoft تحدد حجم البيانات المرسلة بواسطة POST، فعندما تكون كمية البيانات المرسلة بواسطة النموذج كبيرة، سيتم الإبلاغ عن خطأ (خطأ ASP 0107: 80004005). والسبب هو أن Microsoft تحدد الحد الأقصى للبيانات التي يمكن تلقيها باستخدام Request.Form() بـ 100 كيلو بايت. حل المشكلة هو أنه بالنسبة للمجال الذي يحتاج إلى إرسال بيانات ضخمة، قم بتقسيم البيانات إلى عدة أجزاء أصغر من الحد الأقصى قبل إرسال النموذج، ووضعها في عدة حقول مخفية، ومسح الحقول الأصلية في نفس الوقت، ثم تقديم النموذج رسميا. لا يزال الخادم يستخدم Request.Form() لقراءة البيانات الموجودة في كل حقل مخفي، ثم ربطها معًا بالترتيب. الرمز الرئيسي هو كما يلي:
ملاحظة: تحتاج إلى تحديد DIV ضمن تعليمات HTML البرمجية في النموذج لإدراج الحقل المخفي فيه ديناميكيًا.
====رمز عينة العميل====
أضف: <div id=divHidden></div> إلى كود HTML الموجود في النموذج. أضف: onSubmit=return fnPreHandle(this) إلى علامة النموذج. استبدل BigField في الكود الموجود أدناه بالحقل الموجود في النموذج الذي يرسل ملف اسم قاعدة بيانات كبيرة.
كود جافا سكريبت
انسخ رمز الكود كما يلي:
<لغة البرنامج النصي=جافا سكريبت>
// يتم تقسيم البيانات ووضعها في المجال المخفي المقابل، والذي يتم تشغيله في حدث onSubmit الخاص بالنموذج
الدالة fnPreHandle(MyForm)
{
var iCount; // كم عدد المجالات المراد تقسيمها
فار سترداتا // البيانات الأصلية
var iMaxChars = 50000;// بالنظر إلى أن الأحرف الصينية عبارة عن بايتات مزدوجة، فإن الحد الأقصى لعدد الأحرف في المجال يقتصر على 50 كيلو بايت
var iBottleNeck = 2000000; // إذا تجاوزت المقالة 2 مليون كلمة، فيجب مطالبة المستخدم
فار strHTML؛
// البيانات الأصلية
strData = MyForm.BigField.value;
// إذا كانت المقالة طويلة جدًا، فيجب تذكير المستخدم
إذا (strData.length > iBottleNeck)
{
إذا (تأكيد)(المقالة التي تريد نشرها طويلة جدًا، فمن المستحسن أن تقوم بتقسيمها إلى عدة أجزاء ونشرها بشكل منفصل./nإذا كنت تصر على الإرسال، يرجى ملاحظة أن إرسالها بنجاح سيستغرق وقتًا طويلاً./ ن/ن هل تصر على التقديم؟) == خطأ )
عودة كاذبة.
}
iCount = parseInt(strData. length / iMaxChars) + 1;
يسجل // hdnCount عدد النطاقات الفرعية التي تم تقسيم مجال البيانات الأصلي إليها
strHTML = <نوع الإدخال=الاسم المخفي=قيمة hdnCount= + iCount + >;
// إنشاء كود HTML لكل مجال فرعي
لـ (var i = 1; i <= iCount; i++)
{
strHTML = strHTML + /n + <input type=hidden name=hdnBigField + i + >;
}
// قم بإدراج كود HTML لكل حقل مخفي بشكل ديناميكي في DIV (divHidden) في النموذج
document.all.divHidden.innerHTML = strHTML;
// قم بتعيين قيم لكل حقل فرعي
لـ (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
خافت عدد الحقول
خافت ط
intFieldCount = Request.Form(hdnCount)
بالنسبة إلى i=1 إلى intFieldCount
strData = strData & Request.Form(hdnBigfield & i)
التالي
الاستجابة.اكتب strData
%>