同期リクエストを使用するのは良い考えではないことはわかっていますが、これが本当に必要な場合です。
getEndDate
応答の長さが 20 未満の場合、関数呼び出しを自分自身にしようとしましたが、最初の失敗した要求の後 (URL の応答が短すぎる場合) に進みalert(enddate.EDDAYOW);
、エラーが発生し、getEndDate
500 ミリ秒ごとに要求を送信し続けます。
getEndDate
有効な応答を取得して有効なオブジェクトを返すまでリクエストを送信し続ける関数が必要です。その後、JS の次の行に進みます。それを達成する方法は?
var url = 'http://local.com/cgi-bin/hello2.pl';
// url returns a plain text:
// 1234567890 2013 05 May Friday 13 23 45 01
var enddate = getEndDate(url);
alert(enddate.EDDAYOW);
function getEndDate(url) {
var xmlhttp = getXmlHttp();
xmlhttp.open('GET', url, false);
xmlhttp.send();
if (xmlhttp.status == 200 && xmlhttp.responseText.length > 20) {
var n = xmlhttp.responseText.split(" ");
return {
'edseconds': n[0],
'EDYEAR': n[1],
'EDMON': n[2],
'EDMONNAME': n[3],
'EDDAYOW': n[4],
'EDDAY': n[5],
'EDHOUR': n[6],
'EDMIN': n[7],
'EDSEC': n[8]
};
} else {
setTimeout("getEndDate(" + url + ")", 500);
}
}
function getXmlHttp() {
var xmlhttp;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}