0

私は .net1.1 を使用しており、ブラウザの [閉じる] ボタンをクリックすると Jquery を使用してサーバー側のメソッドを呼び出そうとしています。コードが機能していません。以下にコードを投稿しています。

<body MS_POSITIONING="GridLayout" onbeforeunload="javascript:return test()" >

Ceci est une page cachée. Elle est utilisée pour la gestion du multi-fenétrage.

</body>


    function test()
    {
       debugger;
       $(document).ready(function() {
        $.ajax({
        type: "POST",
        url: "HiddenPage.aspx/GetServerTime",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(msg) {
            alert("success"); 
        },
        error: function(msg) {
        alert("Error! Try again..."); 
         }
            });


                return false;           
                        })

        }

コードビハインドで

==================

[WebMethod()]


public DateTime GetServerTime()
{


return DateTime.Now;
}

}

コントロールはこの Web メソッドに移動しません。デバッグできません。ブロック全体が実行された後、コントロールは ' $(document).ready(function() ' に移動します。エラーの種類は表示されませんが、アラートは表示されます表示されません。DateTime の代わりに他の戻り値の型を使用すると、まだ機能しません

**オンロードでこのメソッドテストを呼び出していると、エラー状態のアラートが表示されます.しかし、ブラウザが閉じられたときに呼び出す必要があります.いずれにしても、Webメソッドにはなりません.

4

2 に答える 2

0

$(document).ready(function() { ... })関数を実行しませんが、ドキュメントがロードされたときに実行される関数を登録します。
$(document).ready(function() { ... })ドキュメントのロードイベントの関数を登録します。この関数をonbeforeunloadイベントに登録すると、この関数は実行されません。onbeforeunloadイベントに関数を登録すると、ドキュメントはすでにロードされており、アンロードされているためです。
onbeforeunloadでメソッドを呼び出したい場合は、JSコードを記述してWebMethodを呼び出さないでください。$(document).ready

function test()
{  
    // $(document).ready(function() {  //delete this        
    $.ajax({
    type: "POST",
    url: "HiddenPage.aspx/GetServerTime",
    data: "{}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(msg) { alert("success");    },
    error: function(msg) { alert("Error! Try again..."); }
    });
    return false; 
}
于 2012-10-29T08:49:56.883 に答える
0

残念ながら、ブラウザーの終了を明確に確認することはできません。誰かがこのonbeforeunloadページからリダイレクトされたときにも発火します。DOM ロード時に jQuery を使用してイベントをバインドしてみてください。

$(document).ready(function() {
    $(window).unload(function(e) {
        e.preventDefault();
        test();
    });
});

エラー情報を提供していないため、コードがそうでない理由を正確に言うことはできません。

スクリプトから Web メソッドを呼び出す

Web サービスを確認する必要があります。スクリプトから呼び出すことを伝える必要があります。他の人が正しく言うように、暗黙的に a をシリアル化することはできないDateTimeため、これを取得する最も怠惰な方法は、単に文字列を返すことです。代わりは。

[WebMethod]
[System.Web.Script.Services.ScriptMethod]
public string GetServerTime()
{
    return DateTime.Now.ToString();
}
于 2012-10-29T08:43:14.480 に答える