เกี่ยวกับวัตถุพจนานุกรมของสคริปต์ จริง ๆ แล้วฉันคิดว่า MS ยืมมาจากภาษาสคริปต์แบบไดนามิกเช่น Python และได้รับการพัฒนาสำหรับลูกค้า สำหรับจุดนี้ คุณสามารถดูหน้า 137 ของคู่มืออ้างอิงของ ASP Programmer ของ wrox การบันทึกออบเจ็กต์พจนานุกรมในระดับเซสชันจะลดประสิทธิภาพของระบบ ในขณะที่การบันทึกออบเจ็กต์พจนานุกรมในระดับแอปพลิเคชันจะทำให้เว็บเซิร์ฟเวอร์เสียหาย ฉันจะไม่พูดอะไรเพิ่มเติมเกี่ยวกับเรื่องนี้
ตอนนี้เราต้องพิจารณาว่ามีข้อบกพร่องด้านการออกแบบอะไรบ้างเมื่อออบเจ็กต์พจนานุกรมอยู่ในหน้าเดียว:
คุณสามารถลองสิ่งนี้
ตั้งค่า rs=server.createobject (adodb.recordset)
sql=select * จากตาราง
rs.open sql,conn,1,3
ตั้งค่า ttt=server.createobject (scripting.dictionary)
ttt.add xxx,rs(ฟิลด์)
ตั้งค่า rs=nothing
liu=ttt(xxx) 'คุณจะพบอะไรเมื่อทำเช่นนี้? หน้า asp จะแจ้งว่าเกิดอุบัติเหตุ! - - เรื่องนี้น่าตกใจมาก อุบัติเหตุคืออะไร? มันยากที่จะพูด ต่อมาหลังจากการทดสอบซ้ำแล้วซ้ำอีก ฉันพบว่าเป็นเพราะค่าของ rs(field) ไม่สามารถกำหนดให้กับอ็อบเจ็กต์พจนานุกรมได้โดยตรง หลังจากค้นคว้าซ้ำแล้วซ้ำอีก ฉันก็ได้ข้อสรุปดังนี้: พจนานุกรมเก็บที่อยู่หน่วยความจำ ของ rs(field) ในกรณีนี้ สิ่งที่ฉันเพิ่งเขียนคือหายนะอย่างไม่ต้องสงสัย วิธีแก้ไขคือการใส่ rs (ฟิลด์) นี้ลงในตัวแปร แต่ไม่สามารถบันทึกวัตถุที่มีการเปลี่ยนแปลงเลยได้ นี่เป็นคำถามใหญ่ ดังนั้นฉันจึงเขียนโปรแกรมนี้อีกครั้ง คุณสามารถบันทึกเป็น try.htm เพื่อดูผลลัพธ์
<ภาษาสคริปต์='vbscript'>
ตั้ง ttt=createobject(scripting.dictionary)
tt.add หลิว หุหุ
ตั้งค่า ddd=createobject(scripting.dictionary)
ddd.เพิ่ม ppp,ttt
settt=ไม่มีอะไร
bbb=ddd(ppp)(หลิว)
การแจ้งเตือน(บีบีบี)
</สคริปต์>
ผลลัพธ์เป็นอย่างไร? คุณจะพบว่าไม่มีปัญหากับคำอธิบายการแจ้งเตือน uuu ซึ่งหมายความว่าวัตถุพจนานุกรมจะแทนที่อันอื่นจริงๆ
โคลนทั้งหมดของออบเจ็กต์พจนานุกรมเข้ามา ซึ่งช่วยยืนยันเพิ่มเติมถึงสิ่งที่เขียนในหนังสือของ wrox ว่าออบเจ็กต์พจนานุกรมถูกใช้เมื่อ ms ได้รับการพัฒนา
จริงๆ แล้วมันเป็นเรื่องของลูกค้า นั่นคือสิ่งที่ฉันกำลังพูด
ฉันยังสามารถแสดงโค้ดสำหรับการรวมอาร์เรย์และพจนานุกรมให้คุณได้
<ภาษาสคริปต์='vbscript'>
ผม=1
ชื่อภาพ=(xxx)
str=set & pic_ & i & =createobject( & & scripting.dictionary & & )
ดำเนินการ (str)
str=pic_ & i & .เพิ่ม & & ชื่อรูป & & , & & ชื่อรูป &
ดำเนินการ (str)
ดิมตต์()
ไถ่ถอน(5)
tt(0)=uu
pic_1.เพิ่มรายการ,ttt
liu=pic_1(ชื่อรูป)
ตั้งค่า pic_2=createobject(scripting.dictionary)
ลบ
ไถ่ถอน(5)
tt(0)=iii
nnn=pic_1(รายการ)(0)
pic_2.เพิ่ม rrr,ttt
zzz=pic_2(rrr)(0)
การแจ้งเตือน (หลิว)
การแจ้งเตือน (nnn)
การแจ้งเตือน(zzz)
</สคริปต์>