回发和回调之间的区别

Posted

技术标签:

【中文标题】回发和回调之间的区别【英文标题】:Difference between a Postback and a Callback 【发布时间】:2010-09-26 18:40:18 【问题描述】:

我不断听到“callback”和“postback”这两个词。 两者有什么区别?

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

【问题讨论】:

【参考方案1】:

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

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

对于 Asp.Net,在调用回调时不会刷新 ViewState,这与回发不同。

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

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


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

(来源:esri.com)

【讨论】:

其实回调是一个更通用的编程术语,表示一个函数需要在另一个函数完成后执行。 当指向函数的指针被传递给另一个函数时,它将在稍后调用 图片来源:edndoc.esri.com/arcobjects/9.2/NET_Server_Doc/developer/ADF/…【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

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

当你请求其他页面回调被服务器使用时

【讨论】:

【参考方案5】:

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

【讨论】:

【参考方案6】:

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

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

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

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

CALLBACK 只是 javascript。它只是 ECMASCRIPT 马戏团技巧 ASP.NET 将它们称为 AJAX API 的东西存储在浏览器从服务器下载的巨大 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 请求和 Javascript 技巧被分层到不清楚的语言中。然后它会导致人们构建可怕的 Web 应用程序,这些应用程序会执行所有这些非常简单的编码就能解决的不必要的事情。

我仍然使用并推荐 ASP.NET。它已经走过了漫长的道路和一个伟大的系统。但是,如果更多的人在使用它们之前了解他们所做工作的基础知识将会有所帮助,因为如果您看到引擎盖下的真实情况,这些框架可以进行定制和简化以改进它们。

【讨论】:

以上是关于回发和回调之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

java中的回调和观察者模式有啥区别

ajax省市联动 回发或回调参数无效 启用了事件验证。

回发或回调参数无效的各种情况分析及解决办法

无效的回发或回调参数/无效的视图状态

asp.net:无效的回发或回调参数

js中forEach的用法forEach如何跳出循环forEach与for之间的区别