窗口绑定事件没有触发Ajax调用

时间:2013-05-09 01:30:27

标签: jquery

当我点击后退按钮时,我正在尝试使用服务器上的数据重新加载上一页。 我正在使用Window Before Unload方法。 Ajax调用应该调用Controller并从服务器获取值,但它没有触发。

非常感谢任何帮助。

$(function() {
     $(window).bind('beforeunload', function() {
         $.ajax({
             url: "/test/searchUrl",
             type: "GET",
             cache: false,
             datatype: "text",
             success: function (result) {
                 alert('HI Ajax Call SUCCESS' + result);
             }
         });
         return;
        };
     });

2 个答案:

答案 0 :(得分:0)

我想也许是因为调用是异步的,在ajax调用完成之前页面正在卸载。 尝试使ajax调用同步,这意味着它将保持在那里直到它完成。

    $(function() {
         $(window).bind('beforeunload', function(){
                 $.ajax({
                     async: false,
                     url: "/test/searchUrl",
                     type: "GET",
                     cache: false,
                     datatype: "text",
                     success: function (result) {
                         alert('HI Ajax Call SUCCESS' + result);
                     }
                 });
                return;
            });
    });

编辑: 修复了无关紧要的花括号和圆括号

此外,似乎chrome会在beforeunload中阻止警报,假设是阻止开发人员阻止您离开页面 - 但是,您可以在上面建议的用户返回一个字符串,该字符串将允许使用该字符串的确认对话框。

答案 1 :(得分:0)

这个问题看起来像是回答了你的问题Dialog box runs for 1 sec and disappears?。您没有从beforeunload函数返回任何内容,因此它没有被阻止并且在ajax调用返回之前离开页面,您必须从浏览器将显示的方法返回一个字符串。