ネットワークの接続を確認する方法
クライアント側
画像ファイルを利用(ロード時のみ)
画像をWEBサーバーから取得できたか否か?で判定する。
function fnConnectOK()
{
接続OK時の処理
}
function fnConnectNG()
{
接続NG時の処理
}
<img src="(ネットワークパス)/~.jpg"
style= "width:0px; height:0px;"
onload="fnConnectOK()"
onerror="fnConnectNG()" />
スクリプトファイルを利用(任意のタイミング)
WEBサーバーから取得したスクリプトファイルの関数の実行結果によって判定する。
※~.aspx
<input type="button" id="~" value="更新" onclick="fnBeforeClick()" />
<script type="text/javascript">
var timerBefore;
function fnBeforeClick() {
// 指定秒経過後、エラーと見なす
timerBefore = setTimeout(fnConnectNG, 3000);
//<script src="~/ConnectCheck.js"></script>タグ を作成
//キャッシュ対策でパラメーターを付加
var checkScript = document.createElement("script");
checkScript.src = "~/ConnectCheck.js?" + Math.random();
// ↑タグを動的に生成
// ConnectCheck.jsを読み込んで実行 → fnConnectOK()を実行
var head = document.getElementsByTagName("head")[0];
head.appendChild(checkScript);
}
function fnConnectNG() {
window.alert('サーバーと通信できません。');
}
function fnConnectOK() {
// 指定秒経過後エラー表示のタイマー停止
clearTimeout(timerBefore);
// 本来、ボタン押下で呼び出したい処理
btnClick();
}
</script>
※ConnectCheck.js
// 関数fnConnectOK()の呼び出し
fnConnectOK();
サーバー側
○:クライアント側からの、サーバーから処理が返ってきているか?の確認。
×:サーバー側からの、クライアントに対する接続確認
※~.aspx
function fnAfterCheck()
{
// 前提
// 更新実行後、サーバー側でクライアント側imgの画像パスに値を入れる。
// サーバーでの処理後、クライアントに処理が戻っていれば、
// ここで画像パスを取得できる
var imgServer = document.getElementById('SvrImage');
// 5秒後に画像パスを取得
// 画像パスに値が入っていなければサーバーから処理が返ってきていないと見なす。
mTimer = setTimeout(function () {
if (imgServer.src == "") {
window.alert("サーバーから反応がありません。");
return false;
}
}, 5000);
return true;
}
※サーバー側から処理終了の合図としてパスを設定する為の画像
<asp:Image id="SvrImage" ImageUrl="" runat="server" />
<asp:Button ID="MyButton"
runat="server" Text="Button"
OnClientClick="fnAfterCheck()"
OnClick="MyButton_Click" />
※~.aspx.cs
public partial class MyForm : System.Web.UI.Page
{
protected const string CONST_PicPath = @"(画像パス)";
protected void MyButton_Click(object sender, EventArgs e)
{
for(;;){}
// ↑テスト用無限Loop。これにより↓の画像パスが設定されない。
// 結果、タイマーが作動しエラーメッセージが表示される。
// クライアントの画像を設定
this.SvrImage.ImageUrl = CONST_PicPath;
}
}