我想知道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变得非常简单,例如YUIClosurePrototypeany 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可能会退回到上面链接中提到的一种或多种较旧的技术。

    07-28 01:28
    查看更多