回发和回调之间的区别

问题描述 投票:112回答:6

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

回发是非常特定的ASP.NET页面?

asp.net javascript postback callback
6个回答
201
投票

当页面上的数据(整个页面)从客户端发布到服务器时发生回发..数据被发布回服务器,因此页面被刷新(重新绘制)...想一想作为'发送服务器整个页面(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


18
投票

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

当客户端向未刷新页面的服


5
投票

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


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库和对象返回并接受,并更改用户Web页面和标记的部分内容。

它说大约有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。这是一个漫长的道路和一个伟大的系统。但是如果有更多的人在使用它们之前了解它们的基本知识会有所帮助,因为这些框架可以进行定制和简化,以便在你看到真正发生的事情时进行改进。


0
投票

将请求发送到服务器时发生回发,无需提供有关每个请求的安全性的详细信息。

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.