เนื่องจาก Microsoft จำกัดขนาดของข้อมูลที่ส่งโดย POST เมื่อปริมาณข้อมูลที่ส่งโดยแบบฟอร์มมีขนาดใหญ่ ระบบจะรายงานข้อผิดพลาด (ข้อผิดพลาด ASP 0107: 80004005) เหตุผลก็คือ Microsoft จำกัดข้อมูลสูงสุดที่สามารถรับได้โดยใช้ Request.Form() ไว้ที่ 100K ไบต์ วิธีแก้ปัญหาคือสำหรับโดเมนที่ต้องการส่งข้อมูลขนาดใหญ่ ให้แบ่งข้อมูลออกเป็นหลายส่วนที่เล็กกว่าขีดจำกัดก่อนที่จะส่งแบบฟอร์ม วางไว้ในช่องที่ซ่อนอยู่หลายๆ ช่อง ล้างช่องต้นฉบับพร้อมกัน จากนั้น ส่งแบบฟอร์มอย่างเป็นทางการ เซิร์ฟเวอร์ยังคงใช้ Request.Form() เพื่ออ่านข้อมูลในแต่ละฟิลด์ที่ซ่อนอยู่ จากนั้นจึงประกบเข้าด้วยกันตามลำดับ รหัสหลักมีดังนี้:
หมายเหตุ: คุณต้องระบุ DIV ภายในโค้ด HTML ในแบบฟอร์มเพื่อแทรกฟิลด์ที่ซ่อนไว้แบบไดนามิก
====โค้ดตัวอย่างลูกค้า====
เพิ่ม: <div id=divHidden></div> ลงในโค้ด HTML ในแบบฟอร์ม เพิ่ม: onSubmit=return fnPreHandle(this) ลงในแท็ก Form ชื่อฐานข้อมูลขนาดใหญ่
รหัสจาวาสคริปต์
คัดลอกรหัสรหัสดังต่อไปนี้:
<ภาษาสคริปต์=จาวาสคริปต์>
//ข้อมูลจะถูกแบ่งและวางไว้ในโดเมนที่ซ่อนอยู่ซึ่งจะถูกทริกเกอร์ในเหตุการณ์ onSubmit ของแบบฟอร์ม
ฟังก์ชั่น fnPreHandle (MyForm)
-
var iCount; //จำนวนโดเมนที่จะแบ่งออกเป็น
var strData; //ข้อมูลต้นฉบับ
var iMaxChars = 50000;//เมื่อพิจารณาว่าอักขระภาษาจีนเป็นไบต์คู่ จำนวนอักขระสูงสุดในโดเมนจึงจำกัดอยู่ที่ 50K
var iBottleneck = 2000000; //หากบทความยาวเกิน 2 ล้านคำ ผู้ใช้จะต้องได้รับแจ้ง
var strHTML;
//ข้อมูลเดิม
strData = MyForm.BigField.value;
//หากบทความยาวเกินไป ผู้ใช้จะต้องได้รับการเตือน
ถ้า (strData.length > iBottleneck)
-
ถ้า (ยืนยัน(บทความที่คุณต้องการเผยแพร่ยาวเกินไป ขอแนะนำให้คุณแบ่งออกเป็นหลายส่วนและเผยแพร่แยกกัน/nหากคุณยืนยันในการส่ง โปรดทราบว่าจะต้องใช้เวลานานในการส่งให้สำเร็จ/ n/nคุณยืนยันที่จะส่งหรือไม่?) == false )
กลับเท็จ;
-
iCount = parseInt(strData.length / iMaxChars) + 1;
//hdnCount บันทึกจำนวนโดเมนย่อยที่โดเมนข้อมูลดั้งเดิมถูกแบ่งออกเป็น
strHTML = <ประเภทอินพุต=ชื่อที่ซ่อนอยู่=ค่า hdnCount= + iCount + >;
//สร้างโค้ด HTML สำหรับแต่ละโดเมนย่อย
สำหรับ (var i = 1; i <= iCount; i++)
-
strHTML = strHTML + /n + <ประเภทอินพุต=ชื่อที่ซ่อนอยู่=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 = ;
-
</สคริปต์>
โค้ดตัวอย่างฝั่งเซิร์ฟเวอร์ ASP/โค้ด Visual Basic
คัดลอกรหัสรหัสดังต่อไปนี้:
-
หรี่ strData
Dim intFieldCount
ดิม ไอ
intFieldCount = คำขอแบบฟอร์ม (hdnCount)
สำหรับ i=1 ถึง intFieldCount
strData = strData & คำขอแบบฟอร์ม (hdnBigfield & i)
ต่อไป
การตอบสนองเขียน strData
-