คำถามยอดฮิต กด back แล้วเจอ Error อะไรก็ไม่รู้
หนึ่งปัญหาที่ผมเจอแล้วเป็นอะไรที่อธิบายให้กับลูกค้ายากมากๆ คือปัญหาการกด Back บนบราวเซอร์
ปกติแล้วเมื่อเรากด Back คนกดมักจะคาดหวังว่าจะได้เจอกับหน้าเว็บไซต์ที่ผ่านมา แต่ 99% ของคนกดไม่ทราบหรอกครับว่าหน้าก่อนหน้าคืออะไร ทุกคนล้วนแต่รู้สึกแค่หน้าปัจจุบันมันไม่ใช่ และต้องการย้อนกลับไปหน้าที่ผ่านมาเท่านั้น (ใช้สามัญสำนึก)
จริงๆแล้วหากเป็นเว็บไซต์ที่แสดงผลธรรมดา มักไม่ค่อยมีปัญหาอะไรในการกด Back เช่นการเปิดอ่านข่าว การกดดูรูป ปุ่ม Back จะทำหน้าที่อย่างที่ User คาดหวังได้ แต่ปัญหาปุ่ม Back ไม่เป็นไปตามที่คาดหวัง มักจะเกิดกับระบบที่ซับซ้อนขึ้นมากกว่าการเปิดดูธรรมดา หลายๆ คน (โดยเฉพาะคนเขียนเว็บ) น่าจะเคยเจอหน้า Error แบบนี้ที่ลูกค้าส่งมาให้ และบ่นต่างๆนาๆ หาว่าเป็น bug มั่งแหละ ผิดพลาดมั่งแหละ ผู้ใช้งานไม่เข้าใจมั่งแหละ แต่โดยรวมๆมักโทษว่าเป็นข้อผิดพลาดนั่นแหละครับ ซึ่งผมเองก็ไม่รู้จะอธิบายให้เขาเข้าใจแบบง่ายๆได้ไง เลยลองเขียนบทความนี้ดูเผื่อลูกค้าจะเข้าใจได้มากขึ้น
ทำความเข้าใจก่อนว่าข้อความนี้เป็น "คำเตือน" ที่มาจากบราวเซอร์ ซึ่งถ้าได้อ่านข้อความที่มันแจ้งจะเข้าใจได้ว่ามันพยายามที่จะ "เตือน" เรา (หมายถึงเตือน User คนที่กด Back นั่นแหละครับ) ซึ่งหน้านี้ไม่ได้อยู่ดีๆมันก็โผล่มา แต่เป็นเพราะ User เองกำลังจะทำบางอย่างที่อาจผิดพลาดได้
จริงๆ คำเตือนมันก็ออกจะเข้าใจยากอยู่หรอก (คำเตือนที่เห็นนี้มาจาก Firefox แต่ถ้าจำไม่ผิด IE จะใช้คำที่สื่อสารได้ชัดเจนกว่า) ซึ่งถ้า User กดที่ "ลองอีกครั้ง" บราวเซอร์มันจะแสดงคำเตือนที่ชัดเจนกว่าออกมา บราวเซอร์พยายามจะบอกเราว่า มันจะส่งข้อมูลที่เคยส่งไปก่อนหน้าไปยัง Server อีกครั้ง
ด้วยความที่เราจำไม่ได้ว่าหน้าก่อนหน้าเป็นอะไร เราจึงไม่เข้าใจว่ามันพยายามจะทำอะไรหรือเตือนอะไรเรา
กลับไปทบทวนลำดับเหตุการณ์ที่เราทำก่อนหน้าดู และนี่คือ เคสที่เจอบ่อยที่สุด
จำได้มั้ยว่าในขั้นตอนที่ 3 เราทำอะไรมา
ในขั้นตอนที่ 3 เรา Login มาไงครับ ซึ่งการ Login จะต้องมีการส่งข้อมูลไปยัง Server (username+password นั่นแหละครับ) เมื่อบราวเซอร์พบว่าจะต้องมีการส่งข้อมูลไป มันจึงเตือนเราด้วยหน้าขาวๆ ข้างต้น ว่าจะมีการส่งข้อมูลซ้ำไปอีกครั้ง (เพื่อ Login)
อย่างที่ผมอธิบายไว้ข้างต้นว่า การเปิดดูเว็บธรรมดาจะไม่พบปัญหานี้ (เพราะมันไม่ต้องส่งอะไรไปยัง Server ซ้ำ) และถ้าจะสังเกตุให้ดี ปัญหานี้จะเกิดขึ้นเมื่อมีการกรอกอะไรบางอย่างลงบนเว็บ ซึ่งก็คือฟอร์มนั่นแหละครับ ซึ่งหลังบ้านจะพบได้บ่อยที่สุด ซึ่งเรื่องนี้ไม่ใช่ข้อผิดพลาดแต่อย่างใด
การแก้ปัญหา
บอกก่อนว่าไม่มีทางป้องกันได้ 100% หากยังต้องมีฟอร์มอยู่ ซึ่งการแก้ไขอาจต้องแลกกับอะไรบางอย่าง
ปกติแล้วเมื่อเรากด Back คนกดมักจะคาดหวังว่าจะได้เจอกับหน้าเว็บไซต์ที่ผ่านมา แต่ 99% ของคนกดไม่ทราบหรอกครับว่าหน้าก่อนหน้าคืออะไร ทุกคนล้วนแต่รู้สึกแค่หน้าปัจจุบันมันไม่ใช่ และต้องการย้อนกลับไปหน้าที่ผ่านมาเท่านั้น (ใช้สามัญสำนึก)
จริงๆแล้วหากเป็นเว็บไซต์ที่แสดงผลธรรมดา มักไม่ค่อยมีปัญหาอะไรในการกด Back เช่นการเปิดอ่านข่าว การกดดูรูป ปุ่ม Back จะทำหน้าที่อย่างที่ User คาดหวังได้ แต่ปัญหาปุ่ม Back ไม่เป็นไปตามที่คาดหวัง มักจะเกิดกับระบบที่ซับซ้อนขึ้นมากกว่าการเปิดดูธรรมดา หลายๆ คน (โดยเฉพาะคนเขียนเว็บ) น่าจะเคยเจอหน้า Error แบบนี้ที่ลูกค้าส่งมาให้ และบ่นต่างๆนาๆ หาว่าเป็น bug มั่งแหละ ผิดพลาดมั่งแหละ ผู้ใช้งานไม่เข้าใจมั่งแหละ แต่โดยรวมๆมักโทษว่าเป็นข้อผิดพลาดนั่นแหละครับ ซึ่งผมเองก็ไม่รู้จะอธิบายให้เขาเข้าใจแบบง่ายๆได้ไง เลยลองเขียนบทความนี้ดูเผื่อลูกค้าจะเข้าใจได้มากขึ้น
ทำความเข้าใจก่อนว่าข้อความนี้เป็น "คำเตือน" ที่มาจากบราวเซอร์ ซึ่งถ้าได้อ่านข้อความที่มันแจ้งจะเข้าใจได้ว่ามันพยายามที่จะ "เตือน" เรา (หมายถึงเตือน User คนที่กด Back นั่นแหละครับ) ซึ่งหน้านี้ไม่ได้อยู่ดีๆมันก็โผล่มา แต่เป็นเพราะ User เองกำลังจะทำบางอย่างที่อาจผิดพลาดได้
จริงๆ คำเตือนมันก็ออกจะเข้าใจยากอยู่หรอก (คำเตือนที่เห็นนี้มาจาก Firefox แต่ถ้าจำไม่ผิด IE จะใช้คำที่สื่อสารได้ชัดเจนกว่า) ซึ่งถ้า User กดที่ "ลองอีกครั้ง" บราวเซอร์มันจะแสดงคำเตือนที่ชัดเจนกว่าออกมา บราวเซอร์พยายามจะบอกเราว่า มันจะส่งข้อมูลที่เคยส่งไปก่อนหน้าไปยัง Server อีกครั้ง
ด้วยความที่เราจำไม่ได้ว่าหน้าก่อนหน้าเป็นอะไร เราจึงไม่เข้าใจว่ามันพยายามจะทำอะไรหรือเตือนอะไรเรา
กลับไปทบทวนลำดับเหตุการณ์ที่เราทำก่อนหน้าดู และนี่คือ เคสที่เจอบ่อยที่สุด
- เข้าเว็บไซต์ระบบแอดมินโดยการพิมพ์ URL ที่ Address Bar (หรือวิธีไหนก็ได้)
- กรอกข้อมูลการ Login (ปกติเข้าระบบแอดมินจะเจอหน้า Login ก่อนเสมอ) แล้วกด Submit
- จากนั้นคลิกไปหน้ารายชื่อสมาชิก (หรือหน้าไหนก็ได้) หลังจาก Login สำเร็จ
- ปรากฏว่าไม่ใช่หน้าที่ต้องการ และ กด Back
จำได้มั้ยว่าในขั้นตอนที่ 3 เราทำอะไรมา
ในขั้นตอนที่ 3 เรา Login มาไงครับ ซึ่งการ Login จะต้องมีการส่งข้อมูลไปยัง Server (username+password นั่นแหละครับ) เมื่อบราวเซอร์พบว่าจะต้องมีการส่งข้อมูลไป มันจึงเตือนเราด้วยหน้าขาวๆ ข้างต้น ว่าจะมีการส่งข้อมูลซ้ำไปอีกครั้ง (เพื่อ Login)
อย่างที่ผมอธิบายไว้ข้างต้นว่า การเปิดดูเว็บธรรมดาจะไม่พบปัญหานี้ (เพราะมันไม่ต้องส่งอะไรไปยัง Server ซ้ำ) และถ้าจะสังเกตุให้ดี ปัญหานี้จะเกิดขึ้นเมื่อมีการกรอกอะไรบางอย่างลงบนเว็บ ซึ่งก็คือฟอร์มนั่นแหละครับ ซึ่งหลังบ้านจะพบได้บ่อยที่สุด ซึ่งเรื่องนี้ไม่ใช่ข้อผิดพลาดแต่อย่างใด
การแก้ปัญหา
บอกก่อนว่าไม่มีทางป้องกันได้ 100% หากยังต้องมีฟอร์มอยู่ ซึ่งการแก้ไขอาจต้องแลกกับอะไรบางอย่าง
- วิธีแรก ปิดการแจ้งเตือนบนบราวเซอร์ หลักการก็ตรงไปตรงมาครับ User รำคาญก็ปิดซะไม่ให้มันเตือน (ผมไม่อธิบายวิธีปิดนะครับ เพราะจริงๆแล้วมันเตือนเราแหละถูกแล้ว ใครอยากทำวิธีนี้ก็ไปหาวิธีเอาเอง วิธีนี้แก้ปัญหาได้ 100% แต่ทำยากที่สุดเพราะ User ก็ไม่ได้รู้สึกว่าตัวเองผิด เลยไม่จำเป็นต้องแก้ไขที่ตัวเอง)
- วิธีที่สอง รีไดเรคหน้ามันซะ วิธีนี้เป็นวิธีโบราณแต่ก็ใช้ได้ดี โดยหลังจาก Submit แล้วให้มันรีไดเร็คไปยังหน้าอื่นทันที วิธีนี้เมื่อเรากด Back กลับมาหน้านี้ มันจะพยายามรีไดเร็คไปยังหน้าที่เรากำหนดไว้แทนซึ่งจะทำให้เราไม่สามารถกด Back กลับไปจนถึงขั้นตอนการ Submit ได้ (วิธีนี้ไม่ค่อยนิยมกันแล้วในปัจจุบัน เนื่องจากปัญอาจกลายเป็น User กด Back แล้วรู้สึกเหมือนมันไม่ไปไหนก็ได้ อันเนื่องมาจากมันพยายามเด้งกลับมาหน้าเดิม)
- วิธีที่สาม Submit ฟอร์มด้วย Ajax แทน จริงๆ ผมใช้วิธีนี้เป็นหลัก ซึ่งวิธีนี้แก้ปัญหาได้ก็จริง แต่อาจไม่สามารถใช้ได้กับทุกฟอร์ม (บางฟอร์มอาจไม่สามารถใช้ Ajax ได้)