Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将客户端状态更新到“上的服务器”;onbeforeunload“;事件_Javascript_Apache Flex_Actionscript 3 - Fatal编程技术网

Javascript 将客户端状态更新到“上的服务器”;onbeforeunload“;事件

Javascript 将客户端状态更新到“上的服务器”;onbeforeunload“;事件,javascript,apache-flex,actionscript-3,Javascript,Apache Flex,Actionscript 3,我有一个flash应用程序,需要向服务器发送http请求,服务器将立即断开现有会话。我尝试了一些选择,但没有一个是可靠的。 选项1:在“onbeforeunload”事件中,从flash应用程序内部发送http请求。谬误:这不起作用,因为一旦浏览器关闭,flash播放器就会卸载应用程序,因此通信中断 选项2:在“onbeforeunload”事件中,使用ajax中的XMLHTTPRequest发送http请求。这在IE中运行良好,但在Firefox中不起作用。当我在httpfox中调试http

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

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


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

客户端不应负责告诉服务器它正在断开连接。您可以让客户端定期ping服务器以告知它仍然处于活动状态,或者您可以打开一个永无止境的http请求(comet样式),并在tcp连接中断时触发事件

在PHP中,它看起来是这样的:(未测试)


客户端不应负责告诉服务器它正在断开连接。您可以让客户端定期ping服务器以告知它仍然处于活动状态,或者您可以打开一个永无止境的http请求(comet样式),并在tcp连接中断时触发事件

在PHP中,它看起来是这样的:(未测试)



无论如何,发生的事情是我发送了一个不允许的跨域xmlhttprequest。请看这里。我刚刚修复了URL,它在firefox中也能正常工作。

无论如何,我发送的是一个不允许的跨域xmlhttprequest。请看这里。我刚刚修复了URL,它在firefox中也起到了作用。

您所说的在您描述的场景中是正确的,但我想打开一个永久有效的连接,在网络启动后重新连接。所以tcp断开连接事件对我来说没有多大用处。我还想知道会话何时中断。无论如何,我找到了一个解决方案,并将其作为一个答案发布。您所说的在您描述的场景中是正确的,但我想打开一个永久有效的连接,在网络启动后再次重新连接。所以tcp断开连接事件对我来说没有多大用处。我还想知道会话何时中断。不管怎样,我找到了一个解决方案,并将其作为答案发布。
<?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();
?>