1

ページをロードする前に、ページの可用性を確認することはできますか?

ワイヤレス接続を使用してモバイルデバイスで実行しているフォームがあります。問題は次のとおりです。この接続が常に利用できるとは限らないため、ページの送信またはアンロードを実行しているときにユーザーに警告したいと思います。

問題は、ページに次のようなリダイレクトを行う要素が含まれていることです。

<input type="button" value="MyText" onClick="script1;script2;...window.location='mylocation'" />

ユーザーがこのボタンをクリックしてもサーバーにアクセスできない場合、いくつかの望ましくないエラーが発生します。

また、スクリプトを一般化したい場合は、以前は「mylocation」の値がわかりません。

このページには、フォームを送信するための要素も含まれています。

<input type="submit" name="SUBMIT" value="MyValue" onClick="return eval('validationForm()')" />

送信にはajaxFormプラグインを使用しており、非常にうまく機能します。

4

4 に答える 4

3

簡単に戻るには、代わりにこれを使用してください。

<input type="button" value="Back" onClick="window.location='history.go(-1);" >

ここで、-1は前のページを意味します。現在のページをリロードする場合は、代わりに0を使用し、先に進むには1を使用します。

jqueryのajaxを使用する場合は、それ自体で処理する必要があります... http://api.jquery.com/jQuery.ajax/

$.ajax({
        ///... need argument here...

        timeout: 5000, // in milliseconds
        success: function(data) {
             //Do something success
        },
        error: function(request, status, err) {
            if(status == "timeout") {
               alert("can't reach the server");
            }
        }
    });

コメント後に編集:ファイルがjQueryまたはJavaScriptに存在するかどうかを確認するにはどうすればよいですか? あなたの場合、これは期待どおりに機能します。

//Initialize the var as global so you can use it in the function below
var goto_url = "http://www.mywebsites.com/foo.html"; 

$.ajax({
    url:goto_url;
    type:'HEAD',
    error: function()
    {
        //do something if the gile is not found
    },
    success: function()
    {
         document.location = goto_url; //docuemnt.location will redirect the user to the specified value.
    }
});

これは実際にファイルが存在するかどうかをチェックします。ファイルに接続できない場合はファイルを見つけることができません。ファイルを見つけることができれば、明らかに接続できたので、どちらの場合も勝ちます。

乾杯!

于 2012-10-26T10:49:26.083 に答える
1

サーバーが利用できないという問題をキャッチするには、jQueryAjax関数のコールバックを使用する必要があります。

サーバーにリクエストを送信せずに、サーバーの可用性を確認することはできません。

于 2012-10-26T10:21:37.990 に答える
1

あなたの答えのおかげで、私は問題の解決策を見つけました。これは、スクリプトを起動してリダイレクトする前に、サーバーが達成可能かどうかを確認します。それがコードです:

 function checkConnection(u,s){
    $.ajax({
        url:u,
        cache:false,
        timeout:3000,
        error: function(jqXHR, textStatus)
        {
            alert("Request failed: " + textStatus ); 
        },
        success: function()
        {
            eval(s);   
        }
    });       
 }      

    $(document).ready(function() {
        // part of the function that checks buttons with redirect
        // for any button that contain a redirect on onClick attribute ("window.locarion=")
        $("input[type=button]").each(function(){
            var script = $(this).attr("onClick"); 
            var url = "my_url";
            var position = script.indexOf("window.location") ;  
            if (position >= 0) {       // case of redirect           
               url = "\'"+url+"\'"; // that's my url
               script = "\""+script+"\""; // that's the complete script
               $(this).attr("onClick","checkConnection("+url+","+script+")");
            }
        });
        // part of the function that checks the submit buttons (using ajaxForm plugin)
        var options = {
                    error: function() {                    
                        alert("Message Error");   
                    },
                    target: window.document,
                    replaceTarget: false,
                    timeout:   3000
                };
                $("form").ajaxForm(options);
    });

これがお役に立てば幸いです。

于 2015-04-29T17:00:40.733 に答える
0

接続があるかどうかを確認しようとしています。サーバーが到達可能かどうかを実際に確認する唯一の方法は、そのサーバーにリクエストを送信することです。

適度に短い時間(たとえば3秒)のタイムアウトを設定し、リクエストを行います。タイムアウトエラーが発生した場合は接続がありません。それ以外の場合はフォームを送信してください。

于 2012-10-26T10:22:13.323 に答える