A-AA+then

onReadyStateChange

1,759
สวัสดีครับ...
ผมอยากจะขอความคิดเห็น เรื่องการใช้งาน Ajax สักหน่อยครับ
เวลาที่เราเรียก Ajax เพื่อโหลดข้อมูลขึ้นมาแสดง ในบางครั้งข้อมูลที่เรียกขึ้นมาก็จะแสดงออกมาช้าหรือเร็วต่างกัน
แต่ในกรณีที่ข้อมูลเดียวกัน หน้าเดียวกัน เงื่อนไขในการเรียกก็เหมือนกัน บางครั้งมันก็โหลดขึ้นมาไม่ได้ โดยแสดงรูปรอโหลดค้างอยู่อย่างนั้น
จนต้องกดปุ่มเพื่อเรียกหน้านั้นใหม่ หรือเรียกหน้าอื่นก่อน หรืออาจจะต้อง f5 ไปเลย จึงจะเรียกหน้านั้นได้ปกติ
เหมือนกับว่ามันตรวจสอบสถานะไม่ถูกต้องครับ ผมมีความคิดว่าน่าจะมีปัญหาที่ onReadyStateChange

if (HttPRequest.readyState == 4 && HttPRequest.status == 200){
น่าจะติดตรงขั้นตอนการตรวจสอบตามข้างบนนี้น่ะครับ

ผมใช้ Appserv ในเครื่อง PC ตัวเอง แต่ที่เจอก็เคยเจอในเครื่องที่ใช้จริงในองค์กรด้วย
ผมทดลองโดยการกดปุ่มที่ใช้เรียกฟังก์ชั้นนี้เร็วๆ โดยส่วนใหญ่ก็โหลดข้อมูลขึ้นมาได้รวดเร็วปกติ
แต่ในบางครั้งก็เกิดปัญหาดังที่กล่าวมาแล้ว

ผมลองใช้ทั้งฟังก์ชั่นที่เขียนเอง และใช้ Gajax ก็ติดเหมือนกันครับ

3 ความคิดเห็น

    อาการที่ว่า ไม่ได้มีปัญหามาจาก script หรอครับ...
    โดยทั่วไป ระบบจะทำการส่งตามรูปแบบมาตรฐานอยู่แล้ว ซึ่งมันจะต้องส่งกลัมา ที่ onReadyStateChange เสมอ แต่...
    ค่าที่ส่งกลับอาจไม่ใช่ค่าที่อยากได้ คือ 4 และ 200 ลองอ่านดูบทความนะครับว่าอาจเป็นอะไรได้บ้าง
    อีกปัญหาคือ มีโอกาศ เกิด timeout ได้ง่าย โดยที่เราก็ไม่รู้ตัวด้วย เนื่องจาก Ajax จะไม่มีการ timeout ครับ ถ้าหายก็หายไปเลย
    
    ปัญหาที่เกิด อาจเกิดจาก Server นะครับที่ไม่ตอบสนอง และ อาจ ช้าหรือเร็วต่างกันได้ในบางครั้ง ซึ่งทั้งหมดไม่ใช่เรื่องแปลกอะไร เราควรออกแบบระบบให้ป้องกันการเกิด timeout ให้ได้มากกว่า เช่น อาจเพิ่มการจับเวลาว่ามีการส่งกลับภายในเวลาที่กำหนดหรือไม่ ถ้าไม่มีการส่งกลับก๋ให้ไปซ่อน loading เพื่อให้สามารถเริ่มกระบวนการใหม่ได้ เป็นต้น
    อีกทีก๋คือ หา server ที่เร็วขึ้นอีกสักหน่อยก้ดีครับ หรือ การเชื่อมต่อของเราเองนั้นแหละที่อาจเป็นปัญหาก็ได้
    
    
     

1

ขอบพระคุณมากครับ....
ที่ต้องหาวิธีทำให้มันตรวจสอบสถานะ 4 หรือ 200 ให้มีการ Time out น้อยที่สุดก็เพราะบางครั้งต้องเรียกฟังก์ชั่นอื่นๆต่อๆกันไป เพื่อตรวจสอบหรืออาจต้อง INSERT ข้อมูลลงฐานข้อมูลให้สำเร็จ

บางครั้งถ้าหากเรียกฟังก์ชั่นต่อๆกัน มันรู้สึกว่ามันทำงานไม่ค่อยจำสำเร็จยังไงไม่รู้เหมือนกัน
2

555+++

ทำแบบนั้นก็เท่ากับให้ timeout มันเกิดมากขึ้นน่ะสิ

ควรจัดกลุ่มการทำงานและ ส่งไปครั้งเดียวแต่ทำหลายๆอย่าง มากกว่าที่จะส่งไปหลายๆการทำงาน เพราะ การส่งแต่ละครั้ง โอกาศจะหายมีมากกว่านะครับ และ request ที่มากไปอาจทำให้ระบบล่มได้โดยไม่จำเป็น

3
^