2014-09-29 29 views
0

我对JavaScript很陌生,我有一个按钮需要经常检查服务器是否处于活动状态。Javascript:基于服务器状态的禁用按钮

我正在使用基于Java的Play框架。我已经有一个类ServerStatus返回一个服务是否健康,但我不知道如何链接到我的页面,其中包含按钮。

基本上,我想要的是,如果服务器宕机,那么我希望按钮被禁用,以便用户不能在服务器不可用时使用它。

我看了一下Websockets,看起来非常复杂。我不确定是否有更简单的方法。

编辑

使用的WebSockets:我有一个围绕阅读,似乎我需要使用的onMessage事件。我发现了一些示例代码,但我不知道如何将它放入我的(document).ready函数中。

下面我有一些代码:

$(document).ready(function(){ 
    var WS = window['MozWebSocket'] ? MozWebSocket : WebSocket; 
    var chatSocket = new WS("routes");//This does not seem to accept any @routes 
    var lastState = 'unknown'; 
    chatSocket.onmessage = function(e){ 
    var server_message = e.data; 
    //do something here about enabling and disabling 
    console.log(server_message); 
    } 
}); 

function disable() 
{ 
    //disable all buttons 
} 
function enable() 
{ 
    //enable all buttons 
} 

我失去了对如何在这里添加的WebSocket。

+0

既可以使用的WebSockets,长轮询,SSE(服务器端事件)等等。对这些技术进行一些研究,看看最适合你的是什么。 – proulxs 2014-09-29 17:34:49

+0

在上面的代码中,变量在就绪函数结束时超出了范围。所以这可能无法正确执行。我会建议将var声明移到函数之外。示例:var WS = null。然后在文档就绪函数中,可以在初始化之前删除var。我不太熟悉web套接字,但从JS视图来看,我至少会将var声明提升到一个水平。 – 2014-09-30 14:43:37

回答

1

我从这个similar question and answer

基本代码借款重是在这里:

var isNotWorking = false; 

var myFunc = function(){ 

$.ajax({url: "YOUR_URL_HERE", 
     type: "HEAD", 
     timeout:1000, 
     statusCode: { 
      200: function (response) { 
       //alert('Working!'); 
       isNotWorking =false; 
      }, 
      400: function (response) { 
       //alert('Not working!'); 
       isNotWorking = true; 
      }, 
      0: function (response) { 
       //alert('Not working!'); 
       isNotWorking = true; 
      }    
     } 
}); 

    $('#mybutton').prop('disabled', isNotWorking); 

    doSetTimeOut(); 
} 

var doSetTimeOut = function(){ 

    setTimeout(function(){ 

     myFunc(); 


    }, 1000); 

} 


doSetTimeOut(); 

见工作JS小提琴here

+0

这种类似于设置在计时器上的循环吗? – nbz 2014-09-30 09:28:42

+0

是的。它正是一个循环中的计时器。 – 2014-09-30 14:40:16

+0

好吧,我正试图去一个更清洁的方法,所以我可能会坚持websockets。但是,谢谢你的回答。 – nbz 2014-09-30 15:13:01