2014-09-29 60 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