模拟Stack Overflow平滑投票操作

时间:2012-04-25 10:59:56

标签: javascript asp.net ajax

我想知道google翻译器(translate.google.com)如何在没有回发的情况下保存用户费率,还有其他类似的行为(例如在Stack Overflow中)用户观看没有回发(一切都如此快速和流畅)但是有一些数据库交互,例如Stack Overflow中的投票问题/答案或评论,是Ajax吗?还是只是JavaScript?这真的很好,如何使用VS2010,C#,ASP.NET实现这些类型的操作?

感谢

2 个答案:

答案 0 :(得分:3)

概述

这方面的两个方面:

  • 当您执行需要在服务器上录制的内容时
  • 当你只是看事情并注意到事情更新,即使你没有做任何事情(投票指标改变,你会看到诸如“这篇文章已被修改,点击加载”,“这个问题有已关闭,不再接受答案。“等等。”

当您执行需要在服务器端录制的内容(例如投票)时

这是将ajax消息发送到服务器的JavaScript代码。对话的服务器端可以使用您喜欢的任何技术实现(Web的一个乐趣,客户端和服务器端是分离的)。具体来说,页面加载了当时的投票信息,当您单击投票按钮时,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变得非常简单,例如YUIClosurePrototypeany of several others 。 jQuery目前(到目前为止)是基于浏览器的JavaScript任务最受欢迎的库,但它并不是唯一的。

当你只是看事物时

我只能从外面说这个,但我希望Stack Exchange使用几种“comet”技术中的任何一种(网络套接字,长轮询,隐藏iframes等)。

我希望web sockets是首选。例如,如果我在打开“网络”标签的情况下使用Chrome打开一个问题,我会看到ws://sockets.ny.stackexchange.com/的请求,ws与网络套接字关联one of the two schemes covered by the wire protocol RFC6455(另一个是{{1} SSL加密版本)。 Web套接字的乐趣在于它们正式并且强大地允许客户端和服务器之间的持久双向通信,允许服务器在适当的时候将数据推送到客户端。

Web套接字是reasonably well supported now,明显忽略了IE9及更早版本,因此SE可能会回溯到上述链接中提到的一种或多种旧技术,用于没有它们的浏览器。

答案 1 :(得分:0)

对我来说,替换Dapper的Entity Framework非常有效。速度显着提高。