回发和回调之间的区别

时间:2008-12-13 11:02:24

标签: asp.net javascript postback callback

我一直听到这句话'回调'和'回发'被抛出。
两个有什么区别?

回发非常特定于ASP.NET页面吗?

6 个答案:

答案 0 :(得分:199)

当页面上的数据(整个页面)从客户端发布到服务器时发生回发.. 数据被发布回服务器,因此页面是刷新(重绘)...将其视为'向整个页面发送服务器(asp.net)充满数据'。

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

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

使用ASP.Net发布整个页面的原因是因为ASP.Net使用 post方法将整个页面封装在<form>中,因此当提交按钮是单击页面,表单将被发送到服务器,其中包含表单中的所有字段...基本上整个页面本身。

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


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

ASP.NET Page Life Cycles
(来源:esri.com

答案 1 :(得分:18)

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

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

答案 2 :(得分:5)

我同意Dreas的回答,但我想补充几点。回发是一个术语,最近由ASP .NET编程引入,正如Dreas所解释的那样,而回调更通用,并且在Web开发存在之前就已经被使用了。事实上,当我开始用C语言编程时,我第一次听说回调(可能是之前存在的术语,我不知道),它只是指向函数的指针和指向函数的指针(名称为A)传递给另一个函数(名称为B),稍后将调用A.回调最近也由Yahoo UI Connection Manager和其他Ajax框架使用,但我相信这个术语在旧的C天中首次使用。

答案 3 :(得分:3)

很多讨论都是ASP.NET gobbledygook语言......

答案是肯定的。回发是微软ASP.NET特有的“术语” 但是请记住,像微软这样的供应商将这些流程的OWN版本包装在他们自己的实现中,让我们大家都对Http / Html世界中真正令人困惑的东西感到困惑。

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

不幸的是,这会通过网络发送大量的不确定数据,这样他们的VIEWSTATE及其页面中的姐妹POSTBACK就会被许多人视为浪费带宽和实现网页状态的草率方式。我可以告诉你,大多数现代浏览器和网站,如果使用可缓存的CSS和一致的HTML标记设计,将使用浏览器本机HTML缓存非常自然地返回页面状态。即完全POSTBACK通常是不必要的。

CALLBACK只是JavaScript。它只是ECMASCRIPT马戏团在他们称之为AJAX API的ASP.NET商店中,在浏览器从服务器上下载巨大的JavaScript库,以及哪些ASP.NET开发人员在不知情的情况下打包到他们的网页中以触发网页中的更改而没有完全的POSTBACK。用于AJAX的ASP.NET API只是在客户端创建所有这些大量的Javascript,当用户更改内容,滚动某些内容或在浏览器中点击触发传统JavaScript浏览器DOM事件的内容时,会在浏览器中触发这些Javascript。然后将大量JSON或其他数据传送回服务器进行处理。然后由浏览器内存中的Javascipted库和对象返回并接受,并更改用户网页和标记的部分内容。

它表示约有5-10%的用户和浏览器禁用了Javascript,因此所有这些JSON和AJAX都会崩溃并为这些人刻录。即CALLBACK不起作用。

这就是幕后发生的事情。如果你问我,大部分都是矫枉过正的。这就是为什么ASP.NET中的Web控件模型过去一直受到批评的原因。

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

对于CALLBACK,您只需将一个简单的Javascript / ECMAScript代码添加到同一个HTML页面,当用户滚动某些文本或按钮,单击或更改表单字段时,该网页不会POST,而是在后面您拥有的场景Javascript将一些内容发送到服务器。如何通过自己的JavaScript,JSON或库处理它是另一种交易。但它不是魔术。对于没有Javascipt或Javascript禁用的人,您应该设计没有CALLBACK的页面,只缓存在单击表单字段控件或超链接时返回的任何更改。虽然大多数现代用户代理现在都是为ECMAScripted网站例程设置的,但重新考虑回调例程的一个原因。

这让人们感到困惑......这些非常基本的HTTP请求和Javascripted技巧的供应商实现被分层到不清楚的语言中。然后它会导致人们构建可怕的Web应用程序,这些应用程序可以完成所有这些非常简单的编码可以解决的不必要的东西。

我仍然使用并推荐ASP.NET。这是一个漫长的道路和一个伟大的系统。但是如果有更多的人在使用它们之前了解它们的基本知识会有所帮助,因为这些框架可以进行定制和简化,如果你看到真正在幕后发生的话,可以对它们进行改进。

答案 4 :(得分:0)

回发也是一次往返,基本上当回传被执行时,它会调用特殊的方法,这就是所谓的往返行程。回车位于服务器端,其中往返于客户端sid。

答案 5 :(得分:0)

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

当您对其他页面发出请求时,服务器会使用回调