2011-03-07 10 views
10

यह जांचने का सबसे तेज़ तरीका क्या है कि मेरा सर्वर जावास्क्रिप्ट के माध्यम से ऑनलाइन है या नहीं?जावास्क्रिप्ट: जांचें कि सर्वर ऑनलाइन है या नहीं?

मैं निम्नलिखित को आज़मा चुके AJAX:

function isonline() { 
    var uri = 'MYURL' 
    var xhr = new XMLHttpRequest(); 
    xhr.open("GET",uri,false); 
    xhr.send(null); 
    if(xhr.status == 200) { 
     //is online 
     return xhr.responseText; 
    } 
    else { 
     //is offline 
     return null; 
    } 
} 

समस्या यह है, यह लौटाता है यदि सेवा ऑफ़लाइन है कभी नहीं। मैं एक टाइमआउट कैसे सेट कर सकता हूं ताकि यदि यह निश्चित समय के बाद वापस नहीं आ रहा है, तो मुझे लगता है कि यह ऑफ़लाइन है?

उत्तर

23

XMLHttpRequest क्रॉस-डोमेन काम नहीं करता है। मेरा उत्तर साफ़: इसके बजाय, मैं एक छोटे से <img> है कि आप जल्दी से वापस आने के लिए उम्मीद लोड और onload घटना घड़ी चाहते हैं:

function checkServerStatus() 
{ 
    setServerStatus("unknown"); 
    var img = document.body.appendChild(document.createElement("img")); 
    img.onload = function() 
    { 
     setServerStatus("online"); 
    }; 
    img.onerror = function() 
    { 
     setServerStatus("offline"); 
    }; 
    img.src = "http://myserver.com/ping.gif"; 
} 

संपादित करें। एक ही डोमेन पर XMLHttpRequest समाधान संभव है, लेकिन यदि आप यह जांचना चाहते हैं कि सर्वर ऑनलाइन है या नहीं, तो आईएमजी लोड समाधान सबसे सरल है। टाइमआउट के साथ गड़बड़ करने की कोई ज़रूरत नहीं है। आप कोड देखो बनाना चाहते हैं जैसे कि यह तुल्यकालिक है, यहाँ आप के लिए कुछ वाक्यात्मक चीनी है:

function ifServerOnline(ifOnline, ifOffline) 
{ 
    var img = document.body.appendChild(document.createElement("img")); 
    img.onload = function() 
    { 
     ifOnline && ifOnline.constructor == Function && ifOnline(); 
    }; 
    img.onerror = function() 
    { 
     ifOffline && ifOffline.constructor == Function && ifOffline(); 
    }; 
    img.src = "http://myserver.com/ping.gif";   
} 

ifServerOnline(function() 
{ 
    // server online code here 
}, 
function() 
{ 
    // server offline code here 
}); 
+1

अच्छी तरह से मिला, लेकिन अगर मुझे सही याद है तो आपको वास्तव में इसे डोम में जोड़ना होगा, क्योंकि यदि आप नहीं करते हैं तो सभी ब्राउज़र इसे लोड नहीं करेंगे। संपादित करें: आप 'आतंक' का उपयोग करना चाहेंगे क्योंकि जब छवि मौजूद नहीं है तो यह निष्पादित होगा: http://jsfiddle.net/8ZP9r/ – pimvdb

+0

@pimvdb - अच्छा! 'आतंक' सुझाव के साथ अच्छी कॉल! मैं अपना जवाब अपडेट करूंगा। – gilly3

+0

आपका AJAX सुझाव काम नहीं कर रहा है। अभी भी ऑफ़लाइन पर लटका है। – Skizit

0

XMLHttpRequest का उपयोग करें, फिर जांचें कि यह असफल रहा है या नहीं। सुनिश्चित नहीं है कि यह क्रॉस-डोमेन हालांकि काम करेगा।

1

एक अजाक्स कॉल करें और इसका परिणाम बताएगा।

+0

मैं इसे करने की कोशिश की, काम नहीं करता: http://stackoverflow.com/questions/36007060/show-waiting- पृष्ठ-समय-सर्वर-रीबूट – Black

संबंधित मुद्दे