我想知道google转换器(translate.google.com)如何在不回发的情况下节省用户费率,另外还有类似的行为(例如在Stack Overflow中),而用户没有回发(一切都那么迅速和流畅),但是一些数据库交互,例如Stack Overflow中的投票问题/答案或评论,是Ajax吗?还是只是JavaScript?真的很好,如何使用VS2010,C#,ASP.NET实现这些类型的操作?
谢谢
最佳答案
总览
这有两个方面:
当您执行需要记录在服务器端的操作时(例如,投票)
它是将ajax消息发送到服务器的JavaScript代码。对话的服务器端可以使用任何您喜欢的技术来实现(网络的乐趣之一,客户端和服务器端是分离的)。具体来说,页面将加载投票信息,然后单击投票按钮,JavaScript代码立即更新投票显示,然后向服务器发送ajax请求以记录投票(因此,视觉反馈)。通常,该请求会在合理的时间内完成,并且一切都很好。有时在处理请求时会出错(HTTP错误(例如出了点问题)或服务器拒绝投票的逻辑错误);发生这种情况时,您会看到一条错误消息,并且代码将还原投票的显示(因为该投票未在服务器上注册)。
对于Stack Exchange,他们在JavaScript代码中使用jQuery库。为了让您了解这有多么容易,这是使用jQuery进行直接ajax调用的客户端:
$.ajax({
url: "/path/to/server/resource",
method: "POST",
data: {action: "voteup"},
success: function(data) {
// Do something with the successful response from the server,
// which can send back data
},
error: function(jqXHR, textStatus, errorThrown) {
// Do something with the error that occurred
}
});
服务器端只是以任何有意义的方式响应POST操作。
该示例使用的是jQuery,但是还有许多其他的JavaScript库也使ajax变得非常简单,例如YUI,Closure,Prototype或any of several others。 jQuery是(到目前为止)最流行的基于浏览器的JavaScript任务库,但它并不是唯一的库。
当你只是看东西的时候
我只能从外部谈论这一点,但是我希望Stack Exchange使用几种“comet”技术(Web套接字,长时间轮询,隐藏的
iframes
等)中的任何一种。我希望web sockets是首选。例如,如果在打开“网络”选项卡的情况下使用Chrome打开一个问题,则会看到对
ws://sockets.ny.stackexchange.com/
的请求,并且ws
是与Web套接字关联的one of the two schemes covered by the wire protocol RFC6455(另一个是SSL加密版本wss
)。 Web套接字的乐趣在于,它们正式且可靠地允许客户端和服务器之间进行持久的双向通信,从而允许服务器将数据适当地推送到客户端。Web套接字是reasonably well supported now,明显省略了IE9和更早的版本,因此对于不具有SE9的浏览器,SE可能会退回到上面链接中提到的一种或多种较旧的技术。