Sự khác biệt giữa Đăng lại và Gọi lại


116

Tôi tiếp tục nghe những lời này ' callback ' và ' postback ' ném xung quanh.
Sự khác biệt giữa hai là gì?

Đăng lại có rất cụ thể cho các trang ASP.NET không?

Câu trả lời:


204

Đăng lại xảy ra khi dữ liệu (toàn bộ trang) trên trang được đăng từ máy khách đến máy chủ..khi dữ liệu được đăng lại máy chủ và do đó trang được làm mới (vẽ lại) ... hãy nghĩ về nó như ' gửi cho máy chủ toàn bộ trang (asp.net) đầy dữ liệu '.

Mặt khác, gọi lại cũng là một loại đăng lại đặc biệt , nhưng nó chỉ là một chuyến đi vòng quanh máy chủ để lấy một tập dữ liệu nhỏ (thông thường) và do đó trang không được làm mới, không giống như đăng lại ... hãy nghĩ về nó như là ' gọi máy chủ và nhận lại một số dữ liệu '.

Với Asp.Net, ViewState không được làm mới khi một lệnh gọi lại được gọi , không giống như khi gửi lại .

Lý do mà toàn bộ trang được đăng tải với ASP.Net là vì ASP.Net bao quanh toàn bộ trang trong một <form>với một bài phương pháp , và vì thế khi một nút gửi được nhấp trong trang, các mẫu được gửi đến máy chủ với tất cả các các trường ở dạng ... về cơ bản là toàn bộ trang.

Nếu bạn đang sử dụng FireBug (dành cho Firefox), bạn thực sự có thể thấy các lệnh gọi lại được gọi đến máy chủ trong Console. Bằng cách đó, bạn sẽ thấy dữ liệu cụ thể nào đang được gửi đến máy chủ ( Request) và cả dữ liệu mà máy chủ đã gửi lại cho bạn ( Response).


Hình ảnh dưới đây minh họa Chu kỳ sống của trang của cả postback và callback trong Trang web dựa trên ASP.NET:

Vòng đời trang ASP.NET
(nguồn: esri.com )


18
Trên thực tế, gọi lại là một thuật ngữ lập trình tổng quát hơn cho một hàm cần được thực thi sau khi một hàm khác đã hoàn thành.
Ryan Doherty

1
Đó là khi một con trỏ đến một chức năng được thông qua chức năng khác, mà nó sau này sẽ gọi
Andreas Grech


18

Đăng lại xảy ra khi một yêu cầu được gửi từ máy khách đến máy chủ cho cùng một trang với trang mà người dùng hiện đang xem. Khi đăng lại xảy ra, toàn bộ trang sẽ được làm mới và bạn có thể thấy tiến trình điển hình trên thanh tiến trình ở cuối trình duyệt.

Một lệnh gọi lại, thường được sử dụng với AJAX, xảy ra khi một yêu cầu được gửi từ máy khách đến máy chủ mà trang không được làm mới, chỉ một phần của nó được cập nhật mà không xảy ra bất kỳ nhấp nháy nào trên trình duyệt


5

Tôi đồng ý với câu trả lời của Dreas, nhưng tôi muốn thêm một vài điểm. Postback là một thuật ngữ đã được giới thiệu rất gần đây bởi lập trình ASP .NET như Dreas đã giải thích, trong khi gọi lại là chung chung hơn và đã được sử dụng trước khi phát triển web tồn tại. Trên thực tế, lần đầu tiên tôi nghe nói về callback vào những ngày tôi bắt đầu lập trình bằng C (có thể thuật ngữ này đã tồn tại trước đó, tôi không biết) và nó chỉ đơn giản có nghĩa là một con trỏ đến hàm và con trỏ này đến một hàm (tên này là A) được chuyển đến một hàm khác (tên này là B) mà sau này sẽ gọi A. Gọi lại gần đây cũng được Yahoo UI Connection Manager và các khung Ajax khác sử dụng nhưng tôi tin rằng thuật ngữ này đã được sử dụng lần đầu tiên vào thời C cũ.


4

Rất nhiều cuộc thảo luận này là ngôn ngữ ASP.NET gobbledygook ....

Câu trả lời là CÓ. Postback là một "thuật ngữ" dành riêng cho ASP.NET của Microsoft Nhưng hãy nhớ rằng, các nhà cung cấp như Microsoft quấn các phiên bản RIÊNG của họ về các quy trình này xung quanh việc triển khai chúng, khiến tất cả chúng ta bối rối về điều gì THỰC SỰ XẢY RA trong thế giới Http / Html.

Phiên bản POSTBACK của họ về cơ bản là một yêu cầu HTTP POST truyền thống được gửi trở lại máy chủ gốc. Nhưng trong ASP.NET, họ làm điều đó bằng cách dán một thẻ phần tử FORM HTML khổng lồ (với thuộc tính phương thức POST) xung quanh toàn bộ trang web thay vì các điều khiển biểu mẫu truyền thống trong một phần nhỏ của trang web. Họ làm điều này bởi vì họ đang sử dụng đặc tả HTTP để duy trì "trạng thái" của trang của họ và các điều khiển của nó, đồng thời để đảm bảo toàn bộ trang, ngay cả đánh dấu trường không phải biểu mẫu truyền thống, trở lại nguyên vẹn.

Thật không may, điều này sẽ gửi một lượng LỚN dữ liệu không cần thiết qua dây dẫn đến mức XEM của họ và POSTBACK chị em của nó trong trang bị nhiều người coi là lãng phí băng thông và cách triển khai trạng thái trang web cẩu thả. Tôi có thể cho bạn thấy rằng hầu hết các trình duyệt và trang web hiện đại, nếu được thiết kế bằng cách sử dụng CSS có thể lưu vào bộ nhớ cache và đánh dấu HTML nhất quán, sẽ trả về trạng thái trang khá tự nhiên bằng cách sử dụng bộ nhớ cache HTML gốc của trình duyệt. tức là Full POSTBACK thường không cần thiết.

CALLBACK chỉ là JavaScript. Các thủ thuật xiếc ECMASCRIPT chỉ ASP.NET lưu trữ cái mà họ gọi là API AJAX của họ trong các thư viện JavaScript khổng lồ mà trình duyệt của bạn tải xuống từ máy chủ và các nhà phát triển ASP.NET vô tình đóng gói vào các trang web của họ để kích hoạt các thay đổi trong một trang web mà không có POSTBACK đầy đủ. API ASP.NET cho AJAX chỉ tạo tất cả Javascript lớn này ở phía máy khách và được kích hoạt trong trình duyệt khi người dùng thay đổi thứ gì đó, cuộn qua thứ gì đó hoặc nhấp vào thứ gì đó trong trình duyệt kích hoạt các sự kiện DOM của trình duyệt JavaScript truyền thống, sau đó gửi một lượng lớn JSON hoặc dữ liệu khác trở lại máy chủ để xử lý. Điều đó sau đó được trả lại và chấp nhận bởi các thư viện và đối tượng Javascipted trong bộ nhớ trong trình duyệt, đồng thời thay đổi các phần của trang web người dùng và đánh dấu.

Nó cho biết khoảng 5-10% người dùng và trình duyệt đã vô hiệu hóa Javascript nên tất cả JSON và AJAX này sẽ gặp sự cố và ghi cho những người đó. tức là CALLBACK sẽ không hoạt động.

Đó là những gì diễn ra ở hậu trường. Phần lớn nó là quá mức cần thiết, nếu bạn hỏi tôi. Và đó là lý do tại sao các mô hình Web Control trong ASP.NET đã bị chỉ trích trong quá khứ.

Nếu bạn bỏ qua ASP.NET trong một giây, bạn có thể tự viết một trường MẪU đơn giản trong một trang web HTML với một hộp văn bản và nút duy nhất và nhấn nó và xem nó đăng lên máy chủ, giống như một trang ASP.NET sẽ làm nhưng nhanh hơn và đơn giản hơn. POSTBACK thực sự là như vậy. Trình duyệt tự nhiên gửi cho máy chủ tiêu đề POST HTTP cần thiết để làm như vậy, nhưng lưu HTML vào phần còn lại của trang, do đó nó tự hiển thị nhanh như chớp.

Đối với CALLBACK, bạn có thể chỉ cần thêm một mã Javascript / ECMAScript đơn giản vào cùng một trang HTML đó, khi người dùng cuộn qua một số văn bản hoặc nút, nhấp chuột hoặc thay đổi trường biểu mẫu, trang web sẽ không ĐĂNG, nhưng ở phía sau bạn có Javascript gửi một cái gì đó đến máy chủ. Cách bạn xử lý điều đó thông qua JavaScript, JSON hoặc thư viện của riêng bạn là một thỏa thuận khác. Nhưng nó không phải là ma thuật. Đối với những người không có Javascipt hoặc Javascript bị vô hiệu hóa, bạn nên thiết kế các trang không có CALLBACK và chỉ lưu vào bộ nhớ cache bất kỳ thay đổi nào trả về khi các điều khiển trường biểu mẫu hoặc siêu liên kết được nhấp vào. Một lý do để xem xét lại các quy trình gọi lại mặc dù hầu hết các tác nhân người dùng hiện đại hiện nay đều được thiết lập cho các quy trình trang web ECMAScripted.

Đó là điều khiến mọi người bối rối ...... những cách triển khai của nhà cung cấp này đối với các yêu cầu HTTP rất cơ bản và các thủ thuật Javascrip được phân lớp thành ngôn ngữ không rõ ràng. Sau đó, nó khiến mọi người xây dựng các ứng dụng web khổng lồ làm tất cả những thứ không cần thiết này mà mã hóa rất đơn giản sẽ giải quyết được.

Tôi vẫn sử dụng và khuyên dùng ASP.NET. Đó là một chặng đường dài và một hệ thống tuyệt vời. Nhưng sẽ hữu ích nếu nhiều người hiểu những điều cơ bản về những gì họ làm trước khi sử dụng vì các khung công tác này có thể được tùy chỉnh và đơn giản hóa khá nhiều để cải thiện chúng nếu bạn thấy điều gì đang thực sự diễn ra.


0

Đăng lại xảy ra khi một yêu cầu được gửi đến một máy chủ mà không cần cung cấp chi tiết về bảo mật cho mỗi yêu cầu.

Khi bạn thực hiện yêu cầu gọi lại trang khác được máy chủ sử dụng


0

Postback về cơ bản cũng là một hành trình khứ hồi khi một postback được thực thi tại thời điểm đó nó gọi phương thức đặc biệt được gọi là khứ hồi..Postback nằm ở phía máy chủ nơi mà khứ hồi là ở phía client.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.