回发和回调之间的区别


Answers:


204

当页面上的数据(整个页面)从客户端发布到服务器时,即发生了回发。即,数据被重新发布回服务器,因此页面被刷新(重新绘制)...作为“ 向服务器发送充满数据的整个页面(asp.net) ”。

另一方面,回调也是一种特殊的回发,但是它只是快速往返服务器以获取少量数据(通常),因此页面不被刷新,这与回发不同。 ...将其视为“ 调用服务器并接收一些数据 ”。

使用Asp.Net ,与回发不同,在调用回调时不会刷新ViewState

用ASP.Net发布整个页面的原因是因为ASP.Net <form>post方法将整个页面括起来,所以当单击页面中的“提交”按钮时,表单将与所有内容一起发送到服务器。表单中的字段...基本上是整个页面本身。

如果您使用的是FireBug(适用于Firefox),则实际上可以在中看到对服务器的回调Console。这样,您将看到正在发送到服务器的特定数据Request),以及服务器发回给您的数据(Response)。


下图说明了基于ASP.NET的网站中回发和回调的页面生命周期:

ASP.NET页面生命周期
(来源:esri.com


18
实际上,回调是一个函数的更通用的编程术语,需要在另一个函数完成之后执行。
Ryan Doherty

1
当指向一个函数的指针传递给另一个函数时,它将稍后调用
Andreas Grech


18

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

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


5

我同意Dreas的回答,但我想补充几点。如Dreas所述,回发是ASP .NET编程最近引入的一个术语,而回发是更通用的,并且在Web开发存在之前就已被使用。实际上,我是在我开始使用C进行编程的时候就第一次听说回调的(也许这个名字早在那之前就存在了,我不知道),它的意思仅仅是指向函数的指针和指向函数的指针(命名为A)。被传递给另一个函数(命名为B),该函数随后将调用A。Yahoo UI Connection Manager和其他Ajax框架最近也使用了回调,但我相信该术语最早是在C 年代使用的。


4

这种讨论很多是ASP.NET gobbledygook语言...。

答案是肯定的。回发是特定于Microsoft ASP.NET的“术语”,但是请记住,像Microsoft这样的供应商将这些过程的OWN版本包装在它们自己的实现周围,这使我们所有人都对Http / HTML世界中真正发生的事情感到困惑。

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

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

CALLBACK只是JavaScript。它只是ECMASCRIPT的一种杂技,使ASP.NET将它们称为AJAX API的内容存储在您的浏览器从服务器下载的巨大JavaScript库中,并且ASP.NET开发人员在不知不觉中打包到其网页中以触发网页中的更改而没有完整的POSTBACK。用于AJAX的ASP.NET API只会创建所有这些巨大的Javascript,这些Javascript在客户端,当用户更改某些内容,将某些内容翻滚或单击浏览器中的某些内容触发传统的JavaScript浏览器DOM事件时,就会在浏览器中触发该Javascript然后将大量的JSON或其他数据发送回服务器进行处理。然后,该内容将被浏览器中内存中的Javascipted库和对象返回并接受,并更改了用户网页和标记的一部分。

它说,大约5-10%的用户和浏览器已禁用Javascript,因此所有这些JSON和AJAX都会崩溃并为这些人燃烧。即回叫将不起作用。

这就是幕后故事。如果您问我,这很多都是矫is过正。这就是为什么ASP.NET中的Web控制模型在过去受到批评的原因。

如果您放弃了ASP.NET一秒钟,则可以在带有单个文本框和按钮的HTML网页中自己编写一个简单的FORM字段,然后按一下并将其发布到服务器,就像ASP.NET页面一样,但是更快,更简单。这就是真正的POSTBACK。浏览器自然会向服务器发送服务器所需的POST HTTP标头,但会将HTML缓存在页面的其余部分中,因此它可以自行快速呈现闪电。

对于CALLBACK,您只需在同一HTML页面上添加一个简单的Javascript / ECMAScript代码,当用户将鼠标悬停在某些文本或按钮上,单击或更改表单字段时,该网页就不会发布,而是在您身后让Javascript向服务器发送消息。如何通过自己的JavaScript,JSON或库处理该问题是另一回事。但这不是魔术。对于没有禁用Javascipt或禁用Javascript的用户,您应该设计没有CALLBACK的页面,并且只缓存单击表单字段控件或超链接时返回的所有更改。重新考虑回调例程的原因之一是,尽管现在大多数现代用户代理都已为ECMAScripted网站例程设置了。

这就是让人感到困惑的地方……这些非常基本的HTTP请求和Javascript技巧的供应商实现被分层为不清楚的语言。然后,它使人们构建庞大的Web应用程序,以完成非常简单的编码即可解决的所有不必要的工作。

我仍然使用并推荐ASP.NET。这是一个很长的路要走,而且是一个很棒的系统。但是,如果有更多的人在使用它们之前了解他们所做工作的基础,这将有所帮助,因为如果您真正了解了背后的内容,则可以对这些框架进行自定义和简化,以改善它们。



0

回发基本上也是往返,这是在执行回发时调用的特殊方法,称为回程。回发在服务器端,而在客户机sid上则是回程。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.