2013-03-08 83 views
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; 
    } 
    } 
}); 

我得到第三種錯誤的警報,但是表單仍然提交。我猜這個錯誤覆蓋了我試圖指定一個同步檢查的事實,並且在AJAX返回false之前JavaScript驗證器完成。

有沒有一個很好的解決方法呢?更好的方式來做到這一點?

謝謝!

+2

如果他們沒有互聯網連接,他們會怎麼越來越到您的表單首先? – j08691 2013-03-08 21:55:24

+0

你在'ret_text'中收到了什麼? – EmCo 2013-03-08 21:57:09

+0

@ j08691:它可以切出。我收到了一位用戶的投訴,他在他試圖提交時,他的參差不齊的互聯網出現故障時丟失了他的數據,而且這似乎是一個長期合理的關注 – JSP64 2013-03-08 21:57:55

回答

2

我會走這條路:

  1. 更改「提交」到「按鈕」(或鏈接) - 它會停止提交表單。
  2. 點擊這個按鈕進行AJAX調用,如果一切正常,然後make form.submit();

這只是一個草案,一切都可以變得更加人性化,更加堅固的無JS瀏覽器等

+2

不錯,簡單。謝謝。 – JSP64 2013-03-08 22:25:29