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,它仍然无法正常工作

**当我在 onload 上调用此方法测试时,它会显示错误条件警报。但是我必须在关闭浏览器时调用它。无论如何它都不会使用 web 方法。

4

2 回答 2

0

不幸的是,您无法专门检查浏览器是否关闭。当有人从该页面重定向时,使用onbeforeunload也会触发。尝试在 DOM 加载时使用 jQuery 绑定您的事件。

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

我不能确切地说为什么你的代码没有,因为你没有提供任何错误信息。

从脚本调用 Web 方法

你需要看看你的网络服务,你需要告诉它你将从脚本中调用它,正如另一个人正确地说的那样,你不能隐式序列化 aDateTime所以最懒惰的方法是只返回一个字符串反而。

[WebMethod]
[System.Web.Script.Services.ScriptMethod]
public string GetServerTime()
{
    return DateTime.Now.ToString();
}
于 2012-10-29T08:43:14.480 回答
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 回答