質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

解決済

asp:button 押下前にサーバサイドが応答しているか確認したいためPingのようなことを行いたい

syugaa_buresu
syugaa_buresu

総合スコア1

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

2回答

0評価

0クリップ

620閲覧

投稿2022/01/06 07:46

編集2022/01/15 17:33

前提・実現したいこと

画面遷移やサーバサイドに要求を投げる際に
サーバサイドが応答しているか事前確認を行いたい

最低 Web サーバーが生きていることを確認できれば良いが、できれば Web サーバーの後ろにある
DB サーバーまで生きていることを確認したい。それを ajax を使って非同期でやりたい

※javascriptコード内にあるbtnSecとasp.netのbtnSecは同じIDです。

該当のソースコード

javascript

//各ボタン押下時イベント $("#btnSec").click(function () { if (onlineCheck()) { return true; } else { alert('ネットワーク異常発生!!\n管理者に確認してください'); return false; } });

javascript

/*オンラインか確認する*/ function onlineCheck() { //Pingチェック $.ajax({ type: "Post", async: false, url: window.location.href + '/Ping', contentType: 'application/json', success: function (data) { $('#lblNetWorkInfo').text(''); result = true; }, error: function (data) { $('#lblNetWorkInfo').text('ネットワークエラー'); result = false; } }); return result; }

C#

<asp:Button ID="btnSec" runat="server" Text="反映" OnClick="ClickBtnSection" />

試したこと

・ajax同期通信で実施。想定通りの動きにはなるが画面がしばらく固まってしまうため避けたい

・タイムアウトを設定してやろうと考えたが同期通信ではタイムアウトが使えないため
非同期で作成。しかし非同期のため処理が先に行ってしまいボタンクリックイベントが終わってしまう

補足情報(FW/ツールのバージョンなど)

IE11 互換表示有
jquery1.8.3
asp.net webform

開発環境
visualstudio2015
.net Framework4

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

SurferOnWww

2022/01/06 08:15 編集

「サーバサイドが応答している」というのはどういうことですか? どういう要求に対してどういう応答が返ってくればその条件を満たすのですか? そもそも、初期画面が表示されたということはその時点で「サーバサイドが応答している」ということなので、そのうえさらに「asp:button 押下前にサーバサイドが応答しているか確認」というのがなぜ必要なの理解できないのですが?
syugaa_buresu

2022/01/06 08:24

「サーバサイドが応答している」というのはどういうことですか? どういう要求に対してどういう応答が返ってくればその条件を満たすのですか? → ajaxの要求を投げて帰っくればサーバサイドが応答しているとみなしています。 そもそも、初期画面が表示されたということはその時点で「サーバサイドが応答している」ということなので、そのうえさらに「asp:button 押下前にサーバサイドが応答しているか確認」というのがなぜ必要なの理解できないのですが? → こちらの画面は平たく言えばずっと表示をする画面で ある処理を一定周期で行っているのですがその際にサーバ側が落ちていた場合等で エラーになってしまうのを防ぐために事前に要求を投げて判断をしたい次第です。
SurferOnWww

2022/01/06 08:37

> ajaxの要求を投げて帰っくればサーバサイドが応答しているとみなしています。 Web サーバーが生きていることを確認できれば良いのですか? それとも Web サーバーの後ろにある DB サーバーまで生きていることを確認しなければならないとか?
syugaa_buresu

2022/01/06 08:40

→出来れば後者(DBサーバ)の方が嬉しいですが前者でも構いません。
SurferOnWww

2022/01/06 09:06

上のやり取りで明らかにされた要件「最低 Web サーバーが生きていることを確認できれば良いが、できれば Web サーバーの後ろにある DB サーバーまで生きていることを確認したい。それを ajax を使って非同期でやりたい」を質問欄を編集して追加情報として追記願います。
SurferOnWww

2022/01/06 22:50

ひょっとして $("#btnSec") と <asp:Button ID="btnSection" ... /> は同じボタンですか?
SurferOnWww

2022/01/07 02:24

質問者さん、その後無言ですが、回答しましたのでそれ対するフィードバックを返してください。役に立った/立たなかったぐらいならすぐ返事できるのでは? 役に立たなかったならどこがダメだったかを書くと、より期待するものに近い回答が出てくるかも。とにかく無言は NG です。 上のコメント、 > ひょっとして $("#btnSec") と <asp:Button ID="btnSection" ... /> は同じボタンですか? に対する答えが Yes ならその旨質問欄に追記してください。そうしてもらえればその対応は別途考えて回答欄に追記します。
dodox86

2022/01/07 03:09

@質問者さん ボタン押下前にサーバーの生死判定を行いたいのであれば、Ajaxの同期・非同期関係なしに判定結果を待機しなければならないでしょうから、UIが固まったようになるのは避けられない気がしますが。見た目、バックグラウンドで定周期でチェックするような処理が必要なのでは。
SurferOnWww

2022/01/08 03:01

dodox86 さん> > Ajaxの同期・非同期関係なしに判定結果を待機しなければならないでしょうから、UIが固まったようになるのは避けられない気がしますが。 質問者さんの言う「同期」とはたぶん質問の jQuery ajax のコードにある async: false, のことで、これを設定すると応答が返ってくるまでブラウザはフリーズしてしまいます。(jQuery の documantation から抜粋: "Note that synchronous requests may temporarily lock the browser, disabling any actions while the request is active.") 一方、非同期(async はデフォルトで true)では、「固まったようになる」ことはないです。 なので、非同期 or 同期は、非同期の一択です。
syugaa_buresu

2022/01/10 23:27

失礼いたしました。回答が遅れてしまい申し訳ありません。 ひょっとして $("#btnSec") と <asp:Button ID="btnSection" ... /> は同じボタンですか? → そうです。人に公開できるよう修正してる部分でぬけがありました。同等とみて問題ありません。 SurferOnWwwさんの回答拝見いたしました。Ping確認に関してはそちらで問題なかったです。 ただasp.buttonなので非同期だと応答を待たずにreturnを行ってしまうので画面がリダイレクト?してしまいます。Ping確認後にサーバ側で処理を行う場合は同じくAjaxでやるしか手段はないのでしょうか? よろしくお願いいたします。
syugaa_buresu

2022/01/10 23:30

dodox86さん 一定周期でPing確認は考えておりませんでした。ありがとうございます。 参考にいたします。
SurferOnWww

2022/01/15 03:22

ポーリングしないで済む案を私の回答欄に追記したのですが 1/12 のメンテナンス(と言うより壊滅的な変更)で消えてしまいました。再度書く気力はなくしていたのですが、検証に使ったサンプルコードは自分の PC に残っていたのでそれをアップしておきます。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。