我正在实现一个小“ping”实用程序来检查我们的两台服务器是否在线。
这是javascript代码:
var t1, t2, t3, t4;
function jsContactServers() {
ajaxServerStatusWWW();
ajaxServerStatusAPPS();
}
function ajaxServerStatusWWW() {
try {
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
} else {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
var t1 = setTimeout(function() {
xmlhttp.abort();
clearTimeout(t1);
ServerIsDown("www");
}, 7000);
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var strOut;
strOut = xmlhttp.responseText;
console.log("www:" + strOut);
if (strOut == "1") {
clearTimeout(t1);
document.getElementById("divwww").innerHTML = "www : UP";
document.getElementById("divwww").style.background = "green";
pauseSound("alarm_internet");
pauseSound("alarm_server");
setTimeout(ajaxServerStatusWWW, 10000);
}
}
}
console.log("www");
xmlhttp.open("GET","http://www.mydomain.com/contactserver.php?IP=1.2.3.4",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send();
}
catch(err) {
alert(err);
}
}
function ajaxServerStatusAPPS() {
try {
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
} else {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
var t2 = setTimeout(function() {
xmlhttp.abort();
clearTimeout(t2);
ServerIsDown("apps");
}, 7000);
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var strOut;
strOut = xmlhttp.responseText;
console.log("apps:" + strOut);
if (strOut == "1") {
clearTimeout(t2);
document.getElementById("divapps").innerHTML = "apps : UP";
document.getElementById("divapps").style.background = "green";
setTimeout(ajaxServerStatusAPPS, 10000);
}
}
}
console.log("apps");
xmlhttp.open("GET","http://www.mydomain.com/contactserver.php?IP=4.3.2.1",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send();
}
catch(err) {
alert(err);
}
}
contactserver.php 尝试读取在 IP GET 参数中声明的服务器中的 .php 文件,如果可以读取 php 文件(服务器已启动),则返回“1”。
现在,问题是,我确实收到了回复
ajaxServerStatusAPPS();
但我没有得到任何答复
ajaxServerStatusWWW();
[console.log("www:" + strOut);
不开火]
但是,如果我最初只调用 ajaxServerStatusWWW() 而不是两者,它可以正常工作。如果我通过更改调用同步而不是异步,它也可以正常工作
xmlhttp.open("...", true) ;
至
xmlhttp.open("...", false);
我在这个过程中遗漏了什么吗?为什么会这样?