ความแตกต่างระหว่าง Postback และ Callback


116

ฉันได้ยินคำว่า ' เรียกกลับ ' และ 'โพสต์แบ็ค ' อยู่เรื่อย ๆ
อะไรคือความแตกต่างระหว่างสอง?

Postback มีความเฉพาะเจาะจงมากสำหรับเพจ ASP.NET หรือไม่?

คำตอบ:


204

โพสต์แบ็คเกิดขึ้นเมื่อข้อมูล (ทั้งเพจ) บนเพจถูกโพสต์จากไคลเอนต์ไปยังเซิร์ฟเวอร์ .. นี่ข้อมูลจะถูกโพสต์กลับไปที่เซิร์ฟเวอร์และทำให้เพจถูกรีเฟรช (วาดใหม่) ... ลองคิดดู เป็น ' ส่งเซิร์ฟเวอร์ทั้งหน้า (asp.net) ที่เต็มไปด้วยข้อมูล '

ในทางกลับกันการโทรกลับก็เป็นโพสต์แบ็คแบบพิเศษเช่นกัน แต่เป็นเพียงการเดินทางไป - กลับอย่างรวดเร็วไปยังเซิร์ฟเวอร์เพื่อรับข้อมูลชุดเล็ก ๆ (โดยปกติ) และทำให้หน้าเว็บไม่ได้รับการรีเฟรชซึ่งแตกต่างจากการโพสต์แบ็ค ... คิดว่ามันเป็น ' เรียกเซิร์ฟเวอร์และรับข้อมูลบางส่วนกลับ '

ด้วย Asp.Net ViewState จะไม่รีเฟรชเมื่อมีการเรียกกลับซึ่งแตกต่างจาก Postback

เหตุผลที่ทั้งหน้าถูกโพสต์ด้วย ASP.Net เป็นเพราะ ASP.Net ล้อมรอบทั้งหน้า<form>ด้วยวิธีการโพสต์ดังนั้นเมื่อมีการคลิกปุ่มส่งในหน้าแบบฟอร์มจะถูกส่งไปยังเซิร์ฟเวอร์พร้อมกับ ช่องที่อยู่ในรูปแบบ ... โดยทั่วไปทั้งหน้านั้นเอง

หากคุณใช้FireBug (สำหรับ Firefox) คุณสามารถเห็นการเรียกกลับที่ถูกเรียกไปยังเซิร์ฟเวอร์ในไฟล์Console. ด้วยวิธีนี้คุณจะเห็นว่าข้อมูลใดที่ส่งไปยังเซิร์ฟเวอร์ ( Request) และข้อมูลที่เซิร์ฟเวอร์ส่งกลับมาให้คุณ ( Response)


ภาพด้านล่างแสดงให้เห็นถึงวงจรชีวิตของเพจของทั้งการโพสต์แบ็คและการโทรกลับในเว็บไซต์ที่ใช้ ASP.NET:

วงจรชีวิตของเพจ ASP.NET
(ที่มา: esri.com )


18
อันที่จริงการเรียกกลับเป็นคำที่ใช้ในการเขียนโปรแกรมทั่วไปสำหรับฟังก์ชันที่ต้องดำเนินการหลังจากฟังก์ชันอื่นเสร็จสิ้น
Ryan Doherty

1
เมื่อตัวชี้ไปยังฟังก์ชันถูกส่งผ่านไปยังฟังก์ชันอื่นซึ่งจะเรียกใช้ในภายหลัง
Andreas Grech

แหล่งที่มาของภาพ: edndoc.esri.com/arcobjects/9.2/NET_Server_Doc/developer/ADF/…
Andreas Grech

18

โพสต์แบ็คเกิดขึ้นเมื่อมีการส่งคำขอจากไคลเอนต์ไปยังเซิร์ฟเวอร์สำหรับเพจเดียวกันกับเพจที่ผู้ใช้กำลังดูอยู่ เมื่อเกิดการโพสต์แบ็คทั้งหน้าจะรีเฟรชและคุณสามารถดูความคืบหน้าโดยทั่วไปได้บนแถบความคืบหน้าที่ด้านล่างของเบราว์เซอร์

การโทรกลับโดยทั่วไปจะใช้กับ AJAX เกิดขึ้นเมื่อมีการส่งคำขอจากไคลเอนต์ไปยังเซิร์ฟเวอร์ซึ่งเพจไม่ได้รับการรีเฟรชโดยจะมีการอัปเดตเฉพาะบางส่วนโดยไม่มีการกะพริบเกิดขึ้นบนเบราว์เซอร์


5

ฉันเห็นด้วยกับคำตอบของ Dreas แต่ฉันต้องการเพิ่มสองสามประเด็น Postback เป็นคำศัพท์ที่เพิ่งเปิดตัวโดยการเขียนโปรแกรม ASP .NET ตามที่ Dreas อธิบายในขณะที่การเรียกกลับเป็นแบบทั่วไปและถูกนำมาใช้ก่อนที่จะมีการพัฒนาเว็บ อันที่จริงฉันเคยได้ยินเกี่ยวกับการโทรกลับครั้งแรกในสมัยที่ฉันเริ่มเขียนโปรแกรมด้วยภาษา C (อาจมีคำนี้อยู่ก่อนหน้านั้นฉันไม่รู้) และมันหมายถึงตัวชี้ที่จะทำงานและตัวชี้ไปยังฟังก์ชัน (ตั้งชื่อ A นี้) ถูกส่งต่อไปยังฟังก์ชันอื่น (ตั้งชื่อ B นี้) ซึ่งต่อมาจะเรียกใช้ A. Callback ก็เพิ่งใช้โดยYahoo UI Connection Managerและเฟรมเวิร์ก Ajax อื่น ๆ แต่ฉันเชื่อว่าคำนี้มีการใช้ครั้งแรกใน C สมัยก่อน


4

การสนทนาจำนวนมากนี้เป็นภาษา ASP.NET gobbledygook ....

คำตอบคือใช่ Postback เป็น "คำศัพท์" เฉพาะสำหรับ ASP.NET ของ Microsoft แต่จำไว้ว่าผู้ขายอย่าง Microsoft จะห่อหุ้มกระบวนการเหล่านี้ในเวอร์ชันของตัวเองไว้รอบการใช้งานของพวกเขาเองทำให้เราสับสนว่าเกิดอะไรขึ้นในโลก Http / Html

POSTBACK เวอร์ชันของพวกเขานั้นเป็นคำขอ HTTP POST แบบดั้งเดิมที่ส่งกลับไปยังเซิร์ฟเวอร์ต้นทาง แต่ใน ASP.NET พวกเขาทำได้โดยการติดแท็กองค์ประกอบ FORM HTML ขนาดมหึมา (ด้วยแอตทริบิวต์วิธีการ POST) รอบ ๆ หน้าเว็บทั้งหมดแทนที่จะเป็นตัวควบคุมรูปแบบดั้งเดิมในส่วนเล็ก ๆ ของหน้าเว็บ พวกเขาทำเช่นนี้เนื่องจากใช้ข้อกำหนด HTTP เพื่อรักษา "สถานะ" ของเพจและการควบคุมและเพื่อให้แน่ใจว่าทั้งเพจแม้กระทั่งมาร์กอัปฟิลด์ที่ไม่ใช่รูปแบบดั้งเดิมจะกลับมาเหมือนเดิม

น่าเสียดายที่สิ่งนี้ส่งข้อมูลจำนวนมากที่ไม่เข้าใจผ่านสายซึ่งทำให้ VIEWSTATE และ POSTBACK น้องสาวของพวกเขาในหน้านั้นถูกมองว่าเป็นเรื่องที่สิ้นเปลืองแบนด์วิดท์และเป็นวิธีที่ใช้งานสถานะหน้าเว็บแบบเลอะเทอะ ฉันสามารถแสดงให้คุณเห็นว่าเบราว์เซอร์และเว็บไซต์สมัยใหม่ส่วนใหญ่หากออกแบบโดยใช้ CSS ที่แคชได้และมาร์กอัป HTML ที่สอดคล้องกันจะส่งคืนสถานะของเพจโดยใช้แคช HTML ดั้งเดิมของเบราว์เซอร์ เช่น Full POSTBACK มักไม่จำเป็น

CALLBACK เป็นเพียง JavaScript มันเป็นเพียงเทคนิค ECMASCRIPT ละครสัตว์ ASP.NET เก็บสิ่งที่พวกเขาเรียกว่า AJAX API ของพวกเขาในไลบรารี JavaScript ขนาดมหึมาที่เบราว์เซอร์ของคุณดาวน์โหลดจากเซิร์ฟเวอร์และนักพัฒนา ASP.NET รายใดที่บรรจุลงในหน้าเว็บโดยไม่รู้ตัวเพื่อทริกเกอร์การเปลี่ยนแปลงในหน้าเว็บโดยไม่ต้อง POSTBACK แบบเต็ม ASP.NET API สำหรับ AJAX เพิ่งสร้าง Javascript ขนาดใหญ่ทั้งหมดนี้ที่ฝั่งไคลเอ็นต์และจะถูกทริกเกอร์ในเบราว์เซอร์เมื่อผู้ใช้เปลี่ยนแปลงบางอย่างพลิกบางสิ่งบางอย่างหรือคลิกบางสิ่งในเบราว์เซอร์ที่เรียกใช้เหตุการณ์ DOM เบราว์เซอร์ JavaScript แบบดั้งเดิมซึ่ง จากนั้นจัดส่ง JSON หรือข้อมูลอื่น ๆ จำนวนมากกลับไปยังเซิร์ฟเวอร์เพื่อประมวลผล จากนั้นจะถูกส่งคืนและยอมรับโดยไลบรารีและอ็อบเจ็กต์ Javascipted ในหน่วยความจำในเบราว์เซอร์และเปลี่ยนบางส่วนของเว็บเพจผู้ใช้และมาร์กอัป

กล่าวว่าผู้ใช้และเบราว์เซอร์ประมาณ 5-10% ปิดการใช้งาน Javascript ดังนั้น JSON และ AJAX ทั้งหมดนี้จะขัดข้องและเบิร์นสำหรับคนเหล่านั้น เช่น CALLBACK จะไม่ทำงาน

นั่นคือสิ่งที่เกิดขึ้นเบื้องหลัง มากเกินไปถ้าคุณถามฉัน และนั่นเป็นสาเหตุที่ทำให้โมเดล Web Control ใน ASP.NET ถูกวิพากษ์วิจารณ์ในอดีต

หากคุณละทิ้ง ASP.NET เป็นเวลาหนึ่งวินาทีคุณสามารถเขียนฟิลด์ FORM ง่ายๆด้วยตัวคุณเองในหน้าเว็บ HTML ด้วยกล่องข้อความและปุ่มเดียวแล้วกดและดูโพสต์ไปยังเซิร์ฟเวอร์เหมือนกับที่หน้า ASP.NET จะทำได้ แต่ เร็วขึ้นและง่ายขึ้น นั่นคือสิ่งที่แท้จริงของ POSTBACK โดยปกติเบราว์เซอร์จะส่งเซิร์ฟเวอร์ส่วนหัว POST HTTP ที่จำเป็นเพื่อทำเช่นนั้น แต่แคช HTML ในส่วนที่เหลือของหน้าดังนั้นจึงแสดงผลได้อย่างรวดเร็วด้วยตัวมันเอง

สำหรับการโทรกลับคุณสามารถเพิ่มโค้ด Javascript / ECMAScript แบบธรรมดาลงในหน้า HTML เดียวกันได้โดยที่เมื่อผู้ใช้เลื่อนข้อความหรือปุ่มบางปุ่มคลิกหรือเปลี่ยนฟิลด์แบบฟอร์มหน้าเว็บจะไม่ POST แต่อยู่เบื้องหลังคุณ ให้ Javascript ส่งบางอย่างไปยังเซิร์ฟเวอร์ วิธีจัดการกับ JavaScript, JSON หรือไลบรารีของคุณเองก็เป็นอีกข้อตกลงหนึ่ง แต่มันไม่ใช่เวทมนตร์ สำหรับผู้ที่ไม่มี Javascipt หรือ Javascript ถูกปิดใช้งานคุณควรออกแบบเพจที่ไม่มี CALLBACK และเพียงแค่แคชการเปลี่ยนแปลงใด ๆ ที่ส่งคืนเมื่อมีการคลิกตัวควบคุมฟิลด์ฟอร์มหรือไฮเปอร์ลิงก์ เหตุผลหนึ่งในการพิจารณาขั้นตอนการโทรกลับอีกครั้งแม้ว่า User-agent ที่ทันสมัยที่สุดในขณะนี้ได้รับการตั้งค่าสำหรับรูทีนเว็บไซต์ ECMAScripted

นั่นคือสิ่งที่ทำให้ผู้คนสับสน ...... การใช้งานคำขอ HTTP ขั้นพื้นฐานของผู้ขายและเทคนิค Javascripted เหล่านี้จะแบ่งเป็นชั้น ๆ ในภาษาที่ไม่ชัดเจน จากนั้นทำให้ผู้คนสร้างเว็บแอปพลิเคชันที่น่ากลัวซึ่งทำสิ่งที่ไม่จำเป็นทั้งหมดนี้ซึ่งการเข้ารหัสที่เรียบง่ายจะแก้ปัญหาได้

ฉันยังคงใช้และแนะนำ ASP.NET มันมาไกลและเป็นระบบที่ยอดเยี่ยม แต่มันจะช่วยได้ถ้ามีคนเข้าใจพื้นฐานของสิ่งที่พวกเขาทำก่อนใช้งานมากขึ้นเนื่องจากเฟรมเวิร์กเหล่านี้สามารถปรับแต่งและทำให้ง่ายขึ้นได้เล็กน้อยเพื่อปรับปรุงหากคุณเห็นว่าเกิดอะไรขึ้นภายใต้ประทุน


0

การส่งคืนเกิดขึ้นเมื่อคำขอถูกส่งไปยังเซิร์ฟเวอร์โดยไม่จำเป็นต้องให้รายละเอียดเกี่ยวกับความปลอดภัยสำหรับแต่ละคำขอ

เมื่อคุณทำการร้องขอสำหรับการเรียกกลับหน้าอื่นจะถูกใช้โดยเซิร์ฟเวอร์


0

Postback ยังเป็นการเดินทางแบบไปกลับโดยทั่วไปเมื่อมีการดำเนินการโพสต์แบ็คในเวลานั้นจะเรียกวิธีการพิเศษซึ่งเรียกว่าการเดินทางไปกลับ.

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.