【问题标题】:Long polling with ajax and servlets使用 ajax 和 servlet 进行长轮询
【发布时间】:2016-08-14 10:23:07
【问题描述】:

我正在做一个项目,客户端使用 javascript,服务器端使用 servlet。我正在尝试实现一种实时更新客户信息的方法。即当客户端更新 Web 应用程序中的某些信息时,其他客户端也会看到更新。我发现长轮询是一个很好的技术。这是我试图开始工作的代码。

function poll() {
        setTimeout(function() {
        $.ajax({ 
            type: "GET",
            url: "server",
            contentType: "application/json", 
            data: {
                type: "update",
                card: "string"
            },
            success: function(data) {
                alert(data);
            },
            error: function(data) {
                alert('eroor');
            },
            dataType: "json", 
            complete: poll });
        }, 5000);
} 

我正在尝试每 5 秒向服务器发送一次请求,并获得包含新更新的响应。但是在我在网上看到的所有骨架代码中,data: 都没有设置。如果不设置它,服务器如何知道它收到的请求类型,因为还有其他类型的请求。但是当我设置data: 时,客户端不会发送任何请求。但是没有设置data: 请求被发送到服务器。设置 data: 有错吗?没有它,我如何让 servlet 知道请求的类型?

我知道here 中提到的长轮询不是我想要做的。但是谁能解释我应该做什么以及我做错了什么。

【问题讨论】:

    标签: javascript ajax servlets long-polling polling


    【解决方案1】:

    由于您发出GET 请求,因此数据值将作为 URL 参数附加到 URL。然后,您的 servlet 必须使用 request.getParameter("type")request.getParameter("card") 从请求中提取信息。

    如果您认为没有发送请求,请先检查控制台是否有错误,然后查看浏览器开发人员工具中的网络通信面板。

    【讨论】:

    • 我发现控制台没有发送任何请求。当 data: 未设置时,我可以在控制台中看到响应
    • @user11 您是否看到您的浏览器尝试发送请求?例如。在 Firebugs 网络面板中,请参阅 getfirebug.com/wiki/index.php/Net_Panel
    • @user11 检查这个。 api.jquery.com/jquery.get 。您可以使用 $.get 作为 GET 请求连同数据一起发送
    • @wero data: JSON.stringify("string") 解决了这个问题。服务器日志指示它收到的请求。但我想我在这里没有使用长轮询。
    • @user11 如果数据不是以这种形式出现,您的服务器可能有问题。但是您似乎仍然认为,当您按照问题所示进行操作时,不会发送任何请求。
    【解决方案2】:

    数据:

    问题是您如何设置数据。如果要发送 json 对象,则必须在发送之前对其进行字符串化,如下所示。

    $.ajax({
      url: url,
      type: "POST",
      data: JSON.stringify(data),
      contentType: "application/json",
      complete: callback
    });
    

    没有它我如何让 servlet 知道请求的类型?

    你这是什么意思?知道 contentType?如果是,则按上述发送 contentType 参数。

    我知道这里提到的长轮询不是我想要做的。但是谁能解释我应该做什么以及我做错了什么。

    是的。这不完全是一个长轮询。这就是您每 5 秒向服务器发送一次请求的方式。无论如何服务器应该支持长轮询。

    【讨论】:

    猜你喜欢
    • 2013-10-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 2012-06-26
    • 1970-01-01
    相关资源
    最近更新 更多