JQuery onunload()没有异步的AJAX:false

时间:2013-10-16 19:10:30

标签: jquery onunload

在特定条件下的某个页面上,我需要在页面卸载时在SQL中运行更新语句。它需要在用户到达下一页之前完成。我正在使用JQuery 1.8.3。这是我开始的地方:

$(window).unload(function() {
    $.ajax({
            type: "POST",
            cache: false,
            url: "myScript.php",
            data: ({ /* my data */ }),
            success: function(result) { /* do nothing */ },
            error: function(data) { location.reload(); }
    });
});

使用此方法,update语句未运行。通过阅读它我尝试了“async:false”,这似乎一开始并没有解决我的问题,直到我检查了我的表并看到值正在更新(仅在添加“async:false”之后)。根据进一步阅读,“async:false”已在JQuery 1.8中弃用,但仍在执行更新语句。问题是更新语句在下一页的select语句已经完成之前没有完成执行,因此除非用户刷新页面,否则数据已过期。这是由于部分支持1.8中的“async:false”,写入db的执行速度慢,快速执行从db读取,还有其他一些延迟问题,或者???即使unload事件使用户保持在页面上,下一个HTTP请求是否可能通过?

1 个答案:

答案 0 :(得分:5)

解决:

$(window).on('beforeunload', function() {
    $.ajax({
            type: "POST",
            async: false,
            cache: false,
            url: "myScript.php",
            data: ({ /* my data */ }),
            success: function(result) { /* do nothing */ },
            error: function(data) { location.reload(); }
    });
});

$(窗口).onbeforeunload(...);没用。