ให้ฉันพูดถึงปัญหาที่เราพบในวันนี้ก่อน
กระบวนการส่งออก Excel จำเป็นต้องมีการถ่ายโอนข้อมูลจำนวนมากไปยังพื้นหลังหลังจากกดปุ่ม วิธีการเริ่มต้นมีดังนี้:
คัดลอกรหัสรหัสดังต่อไปนี้:
var actionUrlSetData = "****Action!exportDatas.action"+ "?now=" + วันที่ใหม่().getTime();
window.location.href= actionUrl + "&" + ข้อมูล;
ข้อมูลข้างต้นเป็นสตริงที่ยาวมาก
ไม่มีปัญหาใน Firefox และ Google Chrome แต่ไม่สามารถส่งออกได้ตามปกติใน IE9 (ฉันไม่ได้ลองใช้ใน IE อื่น ๆ ก็ควรจะเหมือนกัน)
สาเหตุของปัญหานี้ก็คือ เบราว์เซอร์ต่างๆ มีการจำกัดความยาวที่แตกต่างกันสำหรับการแยกวิเคราะห์ URL IE มีเบราว์เซอร์ที่เล็กที่สุด จึงมีบางอย่างผิดพลาด
Microsoft Internet Explorer (เบราว์เซอร์)
ขีดจำกัดสูงสุดสำหรับ URL ในเบราว์เซอร์ IE คือ 2,083 อักขระ หากเกินจำนวนนี้ ปุ่มส่งจะไม่ตอบสนอง
ไฟร์ฟอกซ์ (เบราว์เซอร์)
ขีดจำกัดความยาว URL สำหรับเบราว์เซอร์ Firefox คือ 65,536 ตัวอักษร
ซาฟารี (เบราว์เซอร์)
ขีดจำกัดความยาว URL สูงสุดคือ 80,000 อักขระ
โอเปร่า (เบราว์เซอร์)
ขีดจำกัดความยาว URL สูงสุดคือ 190,000 อักขระ
กูเกิล(โครม)
ความยาวสูงสุดของ URL จำกัดอยู่ที่ 8182 อักขระ
โปรดทราบด้วยว่าเว็บเซิร์ฟเวอร์ยังมีข้อจำกัดเกี่ยวกับความยาวของ URL! -
ดังนั้นเราจึงใช้วิธี Get ไม่ได้ เราหาได้เฉพาะวิธีใช้ post เพื่อส่งค่า ดังนั้นเราจึงไม่แน่ใจว่าเหมาะสมหรือไม่จึงอยากขอคำแนะนำจากผู้เชี่ยวชาญ . กล่าวโดยย่อคือสามารถรับรู้ถึงฟังก์ชันได้
แนวคิดก็คือการใช้ post เพื่อถ่ายโอนสตริงแบบยาวไปยังพื้นหลัง บันทึกลงในเซสชัน จากนั้นใช้ window.location.href ในเมธอด post callback
รหัสมีดังนี้:
คัดลอกรหัสรหัสดังต่อไปนี้:
$.post(actionUrlSetData,mapList,function(){
var actionUrl = path + "/***action!exportDatas.action"+ "?now=" + new Date().getTime();
window.location.href= actionUrl + "&" + (ข้อมูล);
-