使用ajax和servlet进行长轮询

时间:2016-04-21 09:48:05

标签: javascript ajax servlets long-polling polling

我正在为客户端使用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知道请求的类型?

据我所知,像http://php.net/manual/en/function.date.php中所提到的,长时间的民意调查不是我想要做的。但任何人都可以解释我应该做什么以及我做错了什么。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

  

数据:

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

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

如果没有它,我怎么能让servlet知道请求的类型?

你的意思是什么?知道contentType?如果是,请按上述方式发送contentType参数。

  

据我所知,在这里提到的长期民意调查不是我想做的事情。但任何人都可以解释我应该做什么以及我做错了什么。

是。这不是一个长期的民意调查。这是您每5秒向服务器发送一次请求的方式。无论如何,服务器应该支持长轮询。