【问题标题】:Update client status to server on "onbeforeunload" event在“onbeforeunload”事件上更新客户端状态到服务器
【发布时间】:2010-09-02 10:33:47
【问题描述】:

我有一个 Flash 应用程序需要向服务器发送一个 http 请求,该请求将立即断开现有会话。我尝试了一些选项,但没有一个是可靠的。 选项 #1:在“onbeforeunload”事件中,从 Flash 应用程序内部发送一个 http 请求。谬误:这不起作用,因为一旦关闭浏览器,Flash 播放器就会卸载应用程序,因此通信中断。

选项 #2:在“onbeforeunload”事件中,使用 ajax 中的 XMLHTTPRequest 发送一个 http 请求。这在 IE 中运行良好,但在 Firefox 中不起作用。当我在 httpfox 中调试 http req 时,它抛出“NS_BINDING_ABORTED”错误,我认为这意味着请求因页面卸载而被取消。

请注意,如果我使用警报框,请求会在两个选项中发送。但我不能使用警报框。还有其他方法吗?或者可能在超时后终止警报框?

【问题讨论】:

    标签: javascript apache-flex actionscript-3


    【解决方案1】:

    告诉服务器它正在断开连接不应该是客户端的责任。您可以让客户端定期对服务器进行 ping 操作,告诉它它还活着,或者您可以打开一个永无止境的 http 请求(彗星式),并在 tcp 连接断开时触发该事件。

    在 PHP 中它看起来像这样:(未测试)

    <?php
        // Run script until aborted.
        ignore_user_abort(true);
        set_time_limit(0);
        while(connection_status() == CONNECTION_NORMAL) {
            sleep(1);
        }
    
        // The connection was lost, so do something.
        onLostConnection();
    ?>
    

    【讨论】:

    • 您所说的在您描述的场景中是正确的,但我想打开一个永久有效的连接,该连接将在网络启动后重新连接。所以tcp断开连接事件对我来说没有多大用处。我还想立即知道会话何时中断。无论如何,我找到了解决方案,并将其发布为答案。
    【解决方案2】:

    无论如何,我正在发送一个不允许的跨域 xmlhttprequest。见这里,http://developer.yahoo.com/javascript/howto-proxy.html。我刚刚修复了网址,它也可以在 Firefox 中使用。

    【讨论】:

      猜你喜欢
      • 2010-10-28
      • 2011-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 2023-03-30
      • 2021-10-01
      • 2012-01-29
      相关资源
      最近更新 更多