1

我有一些简单的代码可以运行以检查 Internet 连接,并且我正在使用localStorage它来保存变量值,但是当我运行它时,该变量的值没有受到影响。那么,我能做些什么来解决它。请帮忙。如果状态更改为true提交将发生,否则将被阻止。

localStorage.setItem("state","");

function checkConnection(){             
   $.ajax({
       url:"assets/ping.js",
       success:function(res){
            localStorage.setItem("state","true");
       },
       onerror:function(){
            localStorage.setItem("state","false");
       } 
   });
 }

$("form").submit(function(e){

   checkConnection();

   if(localStorage.getItem("state") == "false"){
        return false;
   } else if(localStorage.getItem("state") == "true") {
        return true;
   }

});
4

1 回答 1

4

这是一个同步问题。在提交表单之前,您用于检查连接的 API 调用未完成。您希望 AJAX 调用阻塞,直到它得到响应。(实际上我猜它应该被称为 SJAX 进行同步)。

您必须添加asyncisfalse到设置参数。阅读:http ://api.jquery.com/jQuery.ajax/#jQuery-ajax-settings

以下是使用 jQuery 执行此操作的方法:

$.ajax({
   url:"assets/ping.js",
   async: false
   success:function(res){
       localStorage.setItem("state", "true");
   },
   error: function(){
        localStorage.setItem("state","false");
   }           
});

另请注意,错误处理程序应位于errornot下onerror

最后,如果您要做的只是检测 Internet 连接是否丢失,您可以在大多数浏览器上通过检查 window.navigator.onLine 的值来检测。见: http: //www.whatwg.org/specs/web-apps/current-work/#browser-state

于 2013-01-09T19:43:32.340 回答