通过Ajax调用轮询机制

时间:2015-03-19 08:26:34

标签: javascript ajax polling

我需要添加轮询机制来通过我的网页调用Web服务。为此,我尝试在ajax页面内使用javascript来电。我对ajaxjavascript不熟悉。我写了下面的代码。

<html>
<head>
    <script language="JavaScript" type="text/javascript">
         function pollServerForNewMail() {
            setTimeout(function(){
            $.ajax({ url: "server", success: function(data){
                alert("TEST");
                poll();
            }, dataType: "json"});
        }, 10000);
</script>
</head>
<body>

</body>
</html>

我需要的是每隔10秒发出警报TEST。有人请帮帮我。

我将使用我的两个jsp文件编辑帖子。

index.jsp文件

<html>
    <table style="width:100%;text-align:center;'">
<tr>
<td style="text-align:center;width:100%">                               
<a href="polling.jsp?reset=true"><img src="images/import.png" /></a>
</td>
</tr>
</table>
</html>

polling.jsp文件

         <html>
            <head>
                <script language="JavaScript" type="text/javascript">
                     function pollServerForNewMail() {
                        setTimeout(function(){
                        $.ajax({ url: "server", success: function(data){
                            alert("TEST");
                            poll();
                        }, dataType: "json"});
                    }, 10000);
}
        pollServerForNewMail() ;  

          </script>
            </head>
            <body>
       </body>
        </html>

由于

2 个答案:

答案 0 :(得分:0)

setTimeout只会启动一次计时器。

使用setInterval每X秒执行一次代码:

function pollServerForNewMail() {
    setInterval(function(){
        // Code in this function will run every 10 seconds

        $.ajax({ url: "server", success: function(data){
            alert("TEST");
            poll();
        }, dataType: "json"});
    }, 10000);
}

答案 1 :(得分:0)

我通过更改polling.jsp文件解决了我的问题,如下所示。我将添加我的解决方案。

  <html>
    <head>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
        <script>
            var set_delay = 5000,
                    callout = function () {
                        $.ajax({
                            /* blah */
                        })
                                .done(function (response) {
                                   alert("TEST");
                                })
                                .always(function () {
                                    setTimeout(callout, set_delay);
                                });
                    };
            callout();
        </script>
    </head>
    <body>

    </body>
    </html>