javascript - 在 "onbeforeunload"事件上将客户端状态更新到服务器

标签 javascript apache-flex actionscript-3

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

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

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

最佳答案

告诉服务器它正在断开连接不应该是客户端的责任。您可以让客户端定期 ping 服务器以告诉它它仍然存在,或者您可以打开一个永无止境的 http 请求( cometd 式),并在 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();
?>

关于javascript - 在 "onbeforeunload"事件上将客户端状态更新到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3626237/

相关文章:

javascript - 为嵌入式脚本重置 CSS

flash - 处理Flash中声音的最佳方法

html - AS3 - 将变量数据从 HTML 页面传递到 flash

actionscript-3 - 为什么属性在接口(interface)中不可声明

apache-flex - 如何检查Flash Player缓存的内容?

javascript - 不完全可见时隐藏 <li> 元素

javascript - 如何渲染对象数组?

javascript - 如何使用 Javascript 检测类中的哪个元素被单击?

apache-flex - Flex 和 ADO.NET 数据服务...有人做过吗?

javascript - 如何创建这样的Javascript,根据用户的flash播放器版本提供不同的swf