4

フォームを送信する前にユーザーのインターネット接続を確認しようとしています。これにより、JavaScript検証関数がアラートをスローし、接続がない場合はfalseを返すことができます。

私が試した:navigator.onLine-FFでは機能しません(ブラウザが「オフラインモード」であるかどうかのみを確認します)

自分のサイトへのAJAXリクエスト:

$.ajax({  
  type: "GET",  
  url: "internet_test.php",  
  async: false, //trying to force a response before continuing
  timeout:8000,
  success: function(ret_text) {
    if(ret_text == 'yes') {
      return true;
    } else {
      alert("No Connection 1");
      return false;
    }
  },
  error: function(x, t, m) {
    if(t==="timeout") {
      alert("No Connection 2");
      return false;
    } else {
      alert("No Connection 3");  //this is the one triggered
      return false;
    }
  }
});

3番目のタイプのエラーのアラートが表示されますが、フォームはとにかく送信されます。エラーは、同期チェックを指定しようとしたという事実をオーバーライドし、AJAXがfalseを返す前にJavaScriptバリデーターが終了すると推測しています。

これを回避する良い方法はありますか?それを行うためのより良い方法は?

ありがとう!

4

1 に答える 1

2

私はこのように行きます:

  1. 「送信」を「ボタン」(またはリンク) に変更すると、フォームの送信が停止します。
  2. このボタンをクリックして AJAX 呼び出しを行い、問題がなければ form.submit(); を作成します。

これは単なる草案であり、すべてをよりユーザーフレンドリーに、no-js ブラウザーに対してより堅牢にすることができます。

于 2013-03-08T22:01:39.640 に答える