2013-03-08 136 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