วันนี้เมื่อฉันใช้วิธี Ajax ของ JQuery ในการส่งคำขอฉันพบว่าการใช้ไฟล์ ASHX ในพื้นหลังไม่สามารถรับพารามิเตอร์ที่ส่งผ่านในวิธี AJAX หลังจากตรวจสอบเหตุผลทางออนไลน์ฉันพบปัญหา ปรากฎว่าฉันระบุ "ContentType: 'Application/JSON; charset = UTF8'" ในวิธี $ .ajax ซึ่งทำให้พารามิเตอร์ส่งผ่านไปยังเซิร์ฟเวอร์เมื่อประมวลผลคำขอในไฟล์ ASHX
วิธีที่ถูกต้องในการเขียนมีดังนี้:
$ .ajax ({url: '/handler.ashx?operflag=test', tetype:' โพสต์ ',/*เมื่อร้องขอไฟล์ ASHX คุณต้องลบ contentType และรูปแบบข้อมูลคือ {"key", "value"}; ไม่ควรเพิ่มคำพูดสองเท่า charset = utf ', data: {"key": "xdp", "key": "Lonely Wolf"}, แคช: false, ข้อมูล:' text ', ความสำเร็จ: ฟังก์ชั่น (ข้อมูล) {แจ้งเตือน (ข้อมูล);}, ข้อผิดพลาด: ฟังก์ชั่น (xhr) {alert ("ด้วยวิธีนี้คุณสามารถใช้รหัสต่อไปนี้ในไฟล์ ASHX เพื่อรับพารามิเตอร์ที่ส่งผ่านโดยวิธี $ .ajax รหัสมีดังนี้:
String key = context.request ["key"]; String key = context.request ["key"];
ฉันเคยใช้วิธี $ .post เพื่อจัดการกับ AJAX ดังนั้นฉันจึงไม่สังเกตเห็นปัญหานี้ คราวนี้เนื่องจากโครงการจำเป็นต้องใช้ฉันจึงใช้ $ .ajax ฉันไม่ได้คาดหวังว่าจะพบปัญหาข้างต้น โชคดีที่ฉันพบปัญหาและแก้ไขปัญหาในเวลา
นอกจากนี้ฉันได้พบปัญหาแปลก ๆ เมื่อเร็ว ๆ นี้ "หลังจากส่งข้อมูลไปยัง ASHX โดยใช้ AJAX และหลังจากการจัดรูปแบบพารามิเตอร์ด้วย JSON.Stringify รหัสจะเป็นดังนี้:
$ .ajax ({url: '/handler.ashx?operflag=test', tetype:' post ', // json.stringify รูปแบบพารามิเตอร์ข้อมูล: json.stringify ({"key": "xdp-gacl", "key": "White Tiger God" 'json', ความสำเร็จ: ฟังก์ชั่น (ข้อมูล) {แจ้งเตือน (data.key + "|" + data.key);}, ข้อผิดพลาด: ฟังก์ชั่น (xhr) {แจ้งเตือน ("เกิดข้อผิดพลาดโปรดลองอีกครั้งในภายหลัง:" + xhr.responsetext);}});เป็นผลให้วิธีการปกติของการใช้ context.request ["key3"] ใน ASHX ไม่สามารถรับพารามิเตอร์ได้ดังแสดงในรูปด้านล่าง:
ฉันรู้สึกหดหู่เป็นเวลานานและไม่สามารถเข้าใจได้ว่าทำไมเรื่องนี้ถึงเกิดขึ้น ตอนแรกฉันคิดว่ามันเกิดจากรหัสของ ContentType: 'แอปพลิเคชัน/JSON; charset = utf8 'ดังนั้นฉันจึงแสดงความคิดเห็นรหัส:
$ .ajax ({url: '/handler.ashx?operflag=test', tetype:' post ', // json.stringify รูปแบบพารามิเตอร์ข้อมูล: json.stringify ({"key": "xdp-gacl", "key": "White Tiger God Emperor"}) FALSE, DATATYPE: 'JSON', ความสำเร็จ: ฟังก์ชั่น (ข้อมูล) {แจ้งเตือน (data.key + "|" + data.key);}, ข้อผิดพลาด: ฟังก์ชั่น (xhr) {แจ้งเตือน ("เกิดข้อผิดพลาดโปรดลองอีกครั้งในภายหลัง:" + xhr.responsetext);}});แต่ผลลัพธ์ก็ยังคงเหมือนเดิม การใช้ context.request ["Key3"] ยังไม่สามารถรับพารามิเตอร์ได้ ไม่มีทาง เนื่องจากวิธีการทั่วไปไม่สามารถรับได้จากนั้นมองหาวิธีอื่น Baidu พบวิธีแก้ปัญหา คุณสามารถรับได้โดยใช้วิธีการต่อไปนี้ใน ASHX ขั้นแรกให้เขียนวิธีการทั่วไปเพื่อรับพารามิเตอร์รหัสมีดังนี้:
/// <summary> /// รับพารามิเตอร์ /// </summary> /// <param name = "บริบท"> </param> /// <return> </returs> พจนานุกรมส่วนตัว <สตริง, วัตถุ> getParameter (บริบท httpContext) strjson = {"key": "xdp-gacl", "key": "White Tiger God Emperor"} String strjson = httputility.urldecode (reader.readtoend ()); javascripterializer jss = new JavaScripterializer () jss.deserialize <พจนานุกรม <String, Object >> (strjson); return dicparameter;}วิธี getParameter ส่งคืนวัตถุ dicparameter และ dicparameter เก็บพารามิเตอร์ที่ส่งจากวิธี $ .ajax ไปยัง ASHX ดังแสดงในรูปด้านล่าง:
ด้วยวิธีนี้พารามิเตอร์ที่ผ่านสามารถนำออกมาจาก dicparameter สำหรับการประมวลผล รหัสที่สมบูรณ์มีดังนี้:
โมฆะสาธารณะ ProcessRequest (บริบท httpContext) {context.response.contentType = "ข้อความ/ธรรมดา"; สตริง operag = context.request ["operflag"]; ถ้า (operflag == "ทดสอบ") {สตริงคีย์ = บริบท + key; context.response.write (resstr);} อื่นถ้า (operflag == "test") {พจนานุกรม <สตริง, วัตถุ> dicparameter = getParameter (บริบท); คีย์สตริง = dicParameter ["key"] "/",/"คีย์/":/"" + คีย์ + "/"}"context.response.write(resstr);}}ข้างต้นคือข้อมูลที่ส่งโดยไฟล์ ASHX ที่ได้รับจากวิธี $ .ajax () ที่แนะนำโดยตัวแก้ไข ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับทุกคนในเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!