1

インターネット接続をチェックするために実行する簡単なコードがあり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と呼ばれるべきだと思います)。

を設定パラメータに追加する必要がasyncあります。false読む: 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");
   }           
});

errorまた、エラー ハンドラはnotの下にある必要があることに注意してくださいonerror

最後に、インターネット接続が失われたかどうかを検出するだけの場合は、window.navigator.onLine の値を確認することで、ほとんどのブラウザーで検出できます。参照: http://www.whatwg.org/specs/web-apps/current-work/#browser-state

于 2013-01-09T19:43:32.340 に答える