URL の非同期クイック チェックには、AJAX と method=HEAD を使用します。
function ajax_quickresponse(url) {
var xmlhttp = null;
if (window.XMLHttpRequest)
xmlhttp = new XMLHttpRequest();
else if (window.ActiveXObject)
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
if (xmlhttp) {
xmlhttp.open("HEAD", url, true);
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4) {
if ((xmlhttp.status > 199 && xmlhttp.status < 400))
; //OK
else
; //ERR
};
};
xmlhttp.send(null);
};
};
http ステータスを確認するにはこれで十分ですが、サーバー側 (url) でスクリプトを中止しているようです。たとえば、sleep(2); を実行する単純な php スクリプト (url="http://my-host.er/test/script.php") を試すことができます。その後、成功メッセージをログに記録します。ではxmlhttp.open("HEAD", url, true);
、ログに成功エントリがありません。
ではxmlhttp.open("GET", url, true);
、ログに成功のエントリがあります。
ただし、GET/POST を使用すると、javascript は即座に (HEAD を使用すると) 待機するのではなく、2 秒待機します。
ステータスは即座に認識され、JavaScript は最終的な応答を待つ必要がありません。
両方の方法を利用するにはどうすればよいですか? まず、ヘッダーが入ったらすぐにステータスが必要で、外部 URL/スクリプトが返された後、別のリスナーが必要です。
たとえばalert('http status='+xmlhttp.status);
、URL/スクリプトに応じて、最初に、おそらく遅れて、 alert('finally completed');
1回の呼び出しでこれを達成する方法のヒントはありますか?