【问题标题】:Ajax query when user closes the window?用户关闭窗口时的Ajax查询?
【发布时间】:2011-05-31 15:56:17
【问题描述】:

我想在一个用户关闭窗口时执行一个 ajax 查询。我有这个代码:

var $jQ = jQuery.noConflict();

$jQ(window).bind('unload', function() {

    $jQ.ajax({
       type: "GET",
       url: "http://www.mydomain.com/post_untrack.php"  ,
       success: function(msg){
          alert("Untrack");
       }
    });

});

我收到“警报”事件,但脚本没有执行...

post_untrack.php:

<?php
mail("myemail@mydomain.com", "Script executed", "Hooray!!!");
?>

有什么想法吗?

谢谢!!!

【问题讨论】:

    标签: php jquery ajax


    【解决方案1】:

    要完成这项工作,您需要添加属性

    async: false
    

    .ajax()选项对象,另外你需要在onbeforeunload上执行它所以在jQuery中

    $jQ(window).bind('beforeunload',...);
    

    【讨论】:

      【解决方案2】:

      默认情况下,ajax 请求是异步的。因此,尽管您可以在卸载窗口时启动请求,但它可能会立即被取消并且从未真正发送给用户。虽然您可以使请求同步,但同步请求会使浏览器急速停止,从而真正扰乱用户体验。

      this other SO question and its answers了解更多信息。

      当然,如果相关的话,任何 ajax 调用都将受到 Same Origin Policy 的约束。

      【讨论】:

        【解决方案3】:

        发布到的 URL 是否与尝试进行 ajax 调用的页面位于同一域中?

        http://en.wikipedia.org/wiki/Same_origin_policy

        【讨论】:

        • 不...我正在从 myotherdomain.com 进行 ajax 调用。但是我之前有一个对同一个域的 ajax 调用(但是当页面关闭时它不会触发)并且它工作正常。
        猜你喜欢
        • 2013-11-25
        • 1970-01-01
        • 2015-04-27
        • 2012-12-15
        • 1970-01-01
        • 2022-06-29
        • 2015-12-25
        • 2022-01-07
        • 1970-01-01
        相关资源
        最近更新 更多