回发和回调的区别

我一直听到这个词‘ 复试’和‘ 回复’被抛来抛去。
两者有什么区别?

回发对于 ASP.NET 页面是否非常特殊?

83925 次浏览

当页面上的数据(整个页面)从客户端发送到服务器时,将发生 Postback。.即 数据被回发到服务器,因此页面被刷新(重新绘制) ... 把它看作是“ 向服务器发送整个页面(asp.net)的数据”。

On the other hand, 回调也是一种特殊的回发, but it is just a quick round-trip to the server to get a small set of data (normally), and thus the page is not refreshed, unlike with the postback...think of it as 'calling the server, and receiving some data back'.

使用 Asp. Net,the ViewState is not refreshed when a callback is invoked,不像使用回发。

使用 ASP.Net 发布整个页面的原因是,ASP.Net 将整个页面封装在一个 <form>和一个 post method中,因此,当在页面中单击一个提交按钮时,表单将与表单中的所有字段一起发送到服务器... ... 基本上就是整个页面本身。

如果您正在使用 FireBug(用于 Firefox) ,您实际上可以看到在 Console中调用到服务器的回调。这样,您将看到发送到服务器的 specific data(Request)以及服务器发送回来的数据(Response)。


The below image illustrates the Page Life Cycles of both a postback and a callback in a ASP.NET based Website:

ASP.NET Page Life Cycles
(来源: Esri.com)

当从客户端向服务器发送与用户当前查看的页面相同的请求时,将发生回发。当发生回发时,将刷新整个页面,您可以在浏览器底部的进度条上看到典型的进度。

通常与 AJAX 一起使用的回调,发生在当一个请求从客户机发送到页面没有刷新的服务器时,只有部分请求被更新,而浏览器上没有发生任何闪烁

我同意德里亚斯的回答,但我想补充几点。Postback 是最近由 ASP 引入的一个术语。NET 编程,如 Dreas 所解释的,而回调更通用,在 web 开发出现之前就已经被使用了。事实上,我第一次听说回调是在我开始用 C 语言编程的时候(也许这个术语在那之前就存在了,我不知道) ,它仅仅意味着一个函数的指针,这个指向函数的指针(命名为 A)被传递给另一个函数(命名为 B) ,这个函数以后会调用 A。回调最近也被 雅虎用户界面连接管理器和其他 Ajax 框架使用,但是我相信这个术语在过去的 C 语言时代就已经开始使用了。

当请求被发送到服务器时发生回发,不需要提供关于每个请求的安全性的详细信息。

当您请求其他页面回调时,服务器将使用

A postback is also a round trip basically when a postback is executed at that time it calls the special method which is known as round trip..Postback is on the server side where as round trip is on the client sid.

很多讨论都是关于 ASP.NET 的官样文章... ..。

答案是肯定的。 Postback 是微软 ASP.NET 特有的一个“术语” 但是请记住,像微软这样的供应商将他们自己的版本的这些过程包装在他们自己的实现中,这让我们所有人都困惑于在 Http/Html 世界中究竟发生了什么。

它们的 POSTBack 版本基本上是发送回原始服务器的传统 HTTPPOST 请求。但是在 ASP.NET 中,他们通过在整个网页上粘贴一个巨大的 FORM HTML 元素标签(带有 POST 方法属性) ,而不是在网页的一个小部分粘贴传统的表单控件。他们之所以这样做,是因为他们使用 HTTP 规范来维护页面及其控件的“状态”,并确保整个页面,甚至是传统的非表单字段标记,完好无损地返回。

不幸的是,这通过网络发送了大量不必要的数据,以至于他们的 VIEWSTATE 及其在页面中的姐妹 POSTBack 被许多人视为带宽的浪费和实现网页状态的草率方式。我可以向您展示大多数现代浏览器和网站,如果使用可缓存的 CSS 和一致的 HTML 标记设计,将使用浏览器本机 HTML 缓存自然地返回页面状态。完整的回信通常是不必要的。

CALLBACK is just JavaScript. Its just ECMASCRIPT circus tricks ASP.NET stores in what they call their AJAX API in gigantic JavaScript libraries your browser downloads from the server, and which ASP.NET developers unknowingly pack into their web pages to trigger changes in a web page without full POSTBACK. The ASP.NET API for AJAX just creates all this massive Javascript that's on the client-side and which gets triggered in the browser when the user changes something, rolls over something, or clicks something in the browser triggering traditional JavaScript browser DOM events, which then ships a giant load of JSON or other data back to the server to process. That then gets returned and accepted by the Javascipted libraries and objects in memory in the browser, and changes parts of the users web page and markup.

它说大约有5-10% 的用户和浏览器禁用了 Javascript,所以所有这些 JSON 和 AJAX 都会因为这些人而崩溃。回拨不起作用。

这就是幕后发生的事情。要我说,大部分都是过度杀戮。这就是为什么 ASP.NET 中的 Web 控件模型在过去受到了批评。

如果你暂时放弃 ASP.NET,你可以用一个文本框和按钮在一个 HTML 网页中自己写一个简单的 FORM 字段,然后按下它,看着它发送到服务器,就像 ASP.NET 页面一样,但是更快更简单。这才是真正的后背。浏览器自然会向服务器发送必要的 POST HTTP Header,但是会在页面的其余部分缓存 HTML,因此它会自己快速地呈现。

对于 CALLBack,你只需要在同一个 HTML 页面中添加一个简单的 Javascript/ECMAScript 代码,当用户翻转一些文本或按钮,点击或者更改表单字段时,网页不会发布消息,但是在幕后,你可以让 Javascript 向服务器发送消息。如何通过自己的 JavaScript、 JSON 或库来处理这个问题则是另一回事。但这不是魔法。对于那些没有禁用 Javascipt 或 Javascript 的用户,您应该设计没有 CALLBack 的页面,并且只缓存单击表单字段控件或超链接时返回的任何更改。它的一个原因,重新考虑回调例程,虽然大多数现代用户代理现在是为 ECMAScripted 网站例程设置。

这就是人们感到困惑的地方... ... 这些供应商实现的非常基本的 HTTP 请求和 Javascript 技巧被分层为不清楚的语言。然后,它导致人们构建可怕的 Web 应用程序,这些应用程序做所有这些非常简单的编码就可以解决的不必要的事情。

我仍然使用并推荐 ASP.NET。这是一个伟大的系统。但是,如果更多的人在使用这些框架之前了解它们的基本功能,这将会有所帮助,因为这些框架可以进行定制和简化,如果您看到底发生了什么,就可以大大改进它们。