回传和回叫之间的区别

我一直听到这个“ callback ”和“ 回传 ”的字眼。
两者有什么区别?

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

当页面上的数据(整个页面)从客户端发布到服务器时发生回传。我们将数据发布回服务器 ,从而刷新页面(重绘)…想起来作为“ 发送服务器的整个页面(asp.net)充满数据 ”。

另一方面, callback也是一种特殊的回发 ,但它只是一个快速的往返服务器,以获得一小组数据(通常),因此页面不刷新,不像回发…把它想象成“ 调用服务器,然后接收一些数据 ”。

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

整个页面与ASP.Net一起发布的原因是因为ASP.Net使用post方法将整个页面封装在一个<form> ,所以当页面中单击一个提交button时,表单被发送到服务器与所有的forms领域…基本上整个页面本身。

如果您使用的是FireBug (用于Firefox),则实际上您可以在Console看到调用服务器的callback。 这样,你会看到什么特定的数据被发送到服务器( Request ),还有服务器发送回你的数据( Response )。


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

ASP.NET页面生命周期http://edndoc.esri.com/arcobjects/9.2/NET_Server_Doc/developer/ADF/graphics%5Cpage_lifecycle.png

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

通常与AJAX一起使用的callback发生在从客户端向未刷新页面的服务器发送请求时,只有一部分被更新而浏览器没有任何闪烁

我同意Dreas的回答,但我想补充几点。 Postback是一个最近被ASP.NET编程引入的术语,如Dreas解释的,而callback更通用,并且在web开发之前已经被使用了。 实际上,在我开始用C语言开始编程的时候,我第一次听说过callback函数(也许这个词在那之前就存在了,我不知道),它只是指向函数的指针,而这个指针指向一个函数(命名为A)被传递给另一个函数(称为B),稍后将调用A.callback最近也被Yahoo UI连接pipe理器和其他Ajax框架使用,但是我相信这个术语在旧的Cdate已经被首次使用了。

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

答案是肯定的。 回传是微软ASP.NET特有的“术语”。但请记住,像微软这样的供应商把他们自己的OWN版本的这些进程包装在他们自己的实现中,这让我们大惑不解:在Http / Html世界里,真正的HAPPENS是什么。

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

不幸的是,这会通过networking发送大量不规则的数据,使得他们的VIEWSTATE及其在页面中的姊妹POSTBACK被许多人视为浪费带宽和实现网页状态的sl way方式。 我可以告诉你,大多数现代浏览器和网站,如果使用可caching的CSS和一致的HTML标记devise,将使用浏览器原生HTMLcaching很自然地返回页面状态。 即完全POSTBACK往往是不必要的。

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

它说约5-10%的用户和浏览器禁用了JavaScript,所有这些JSON和AJAX都会为这些用户造成崩溃。 即CALLBACK不起作用。

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

如果您暂时放弃了ASP.NET,那么您可以使用单个文本框和button自己在HTML网页中编写一个简单的FORM字段,然后按下该button并将其发送到服务器,就像ASP.NET页面所做的一样更快,更简单。 这就是真正的POSTBACK。 浏览器自然会向服务器发送必要的POST HTTP Header,但是会在页面的其余部分cachingHTML,所以它会自行渲染闪电。

对于CALLBACK,你可以添加一个简单的Javascript / ECMAScript代码到相同的HTML页面,当用户滚动一些文本或button,点击或更改表单字段,网页不POST,但在幕后有Javascript发送到服务器的东西。 如何通过自己的JavaScript,JSON或库来处理这个问题是另一回事。 但它不是魔术。 对于没有禁用Javascipt或Javascript的用户,您应该devise没有CALLBACK的页面,并且只需caching单击表单域控件或超链接时所返回的所有更改。 其中一个重新考虑大多数现代用户代理callback例程的原因是为ECMAScripted网站例程设置的。

这就是混淆人们的……这些非常基本的HTTP请求和Java脚本技巧的供应商实现会被分成不清楚的语言。 然后,它会让人们构build可怕的Web应用程序,完成所有这些非常简单的编码所能解决的不必要的事情。

我仍然使用和推荐ASP.NET。 这是一个漫长的过程,一个伟大的系统。 但是如果有更多的人在使用它们之前就理解了它们的基本function,这将会有所帮助,因为如果你看到底下真正发生了什么,这些框架可以被定制和简化以提高它们。

回发是一个请求从一个客户端发送到服务器从同一个页面,用户已经在使用。“

ASP.NET引入了一种机制来将HTTP POST请求发回到同一页面。 它基本上是把一个完整的页面发回服务器(即发送所有的数据)在同一页面上。 所以,整个页面刷新。

为了理解这个回发机制如何在ASP.NET中工作,请遵循以下简单的步骤:

1.将新的ASP.NET Web窗体页面添加到项目,例如WebForm1.aspx。

2.在HTML Source视图中查看页面代码。 你会发现像下面的屏幕:看代码的表格行。

 <form id="form1" runat="server"> 

它代表了表单控件的服务器端实现。

现在只需运行应用程序即可查看WebForm1.aspx页面并查看其源代码。 页面的HTML源代码将显示如下的表单元素:

 <form method="post" action="WebForm1.aspx" id="form1"> 

您可以看到,使用HTTP方法生成的HTML表单元素为“POST”,action =“WebForm1.aspx”。 所以,如果点击一个提交button,页面默认会回发给自己。

callback通常是在另一个函数完成之后执行一个函数的调用。“

但是,如果我们试图区分它与回发 ,那么我们可以说:这是一个调用服务器接收特定的数据,而不是整个页面刷新像回发。 在ASP.NET中,它使用AJAX来实现,它调用服务器并用收到的特定数据更新页面的一部分。

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

当你请求服务器使用的其他页面callback

回发也基本上是一个回程,当时执行一个回传它调用所谓的往返旅程的特殊方法..后退是在服务器端,往返是在客户端sid。