提交表单前验证连接

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;
    }
  }
});

我收到了第三种错误的警告,但表单仍然提交了。我猜测这个错误覆盖了我尝试指定同步检查的事实,并且JavaScript验证器在AJAX返回false之前完成了。

有没有好的解决方法?更好的方法吗?

谢谢!


2
如果他们没有互联网连接,他们首先怎么能访问到你的表单呢? - j08691
ret_text 中,您接收到了什么? - emco
@j08691:它可能会中断。我收到了一个用户的投诉,他在试图提交时由于不稳定的互联网连接而丢失了数据,这似乎是对于长表单的合理担忧。 - JSP64
@EmCo:internet_test.php 只是 <?php echo 'yes'; ?>。 - JSP64
1个回答

2

我会这样做:

  1. 将“submit”更改为“button”(或链接)- 这将停止提交表单。
  2. 单击此按钮时,进行AJAX调用,如果一切正常,则进行form.submit();

这只是一个草稿,可以使所有内容更加用户友好,对于无js浏览器更加健壮等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接