栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

connection_aborted()在ajax调用上不起作用

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

connection_aborted()在ajax调用上不起作用

您将需要添加“ ignore_user_abort(true);” 在PHP脚本之上,并在从脚本中回显某些内容后调用“
ob_flush()”(有关原因,请参见 PHP
flush()手册页
)。工作示例(概念验证):

<?phpignore_user_abort(true);function log_message($s, $ss) {  $myFile = "log.txt";  $fh = fopen($myFile, 'a') or die("can't open file");  $stringData = $s . ": " . $ss . "n";  fwrite($fh, $stringData);  fclose($fh);}for ($i=0;$i<5;$i++) {    echo "<br>";    //flush();    ob_flush();    if (connection_aborted()) {        log_message('error1', connection_status());        exit;    }    else {        log_message('error2', connection_status());    }    sleep(1);}

如果连接仍处于活动状态,则PS connection_status()返回0,如果关闭则返回1。

编辑:

我的错。调用flush()和ob_flush()(请阅读flush()手册页,上面的链接,以及
本主题的),否则可能不起作用,具体取决于服务器/ php配置。以下代码已在WAMP和PHP
5.3.8上进行了测试(无需调用flush()即可工作),现在已在Ubuntu PHP
5.3.10上进行了测试。需要在ob_flush()之前调用flush()的位置。

完整的测试代码:

index.html:

 <html>  <head>    <script src="http://pre.jquery.com/jquery-1.8.0.min.js"></script>    <script>      $(document).ready(function() {        $.ajax({          url: "script.php",          context: document.body        }).done(function(data) {          alert(data);        });      })    </script>  </head>  <body>  </body></html>

script.php:

ignore_user_abort(true);function log_message($type, $message, $file = 'log.txt') {    $fh = fopen($file, 'a') or die("can't open file");    $conn_status = connection_status();    if($conn_status === CONNECTION_NORMAL) {        $status = 'normal';    } elseif($conn_status  === CONNECTION_ABORTED) {         $status = 'aborted';    } else {        $status = 'timeout';    }    $aborted = connection_aborted() ? 'yes' : 'no';    $data  = $type . ': ' . $message . "n";    $data .= 'Connection status: ' . $status . "n";    $data .= 'Aborted: ' . $aborted . "nnn";    fwrite($fh, $data);    fclose($fh);}for ($i = 0; $i < 10; $i++) {    echo "<br>";    flush();    ob_flush();    if (connection_aborted()) {        log_message('Error', 'Connection closed by user!');        exit;    }    else {        log_message('Info', 'Everything is fine. Move along...');    }    sleep(1);}

调用index.html页面并关闭选项卡或整个浏览器后,您应该在log.txt文件中看到以下信息:

Info: Everything is fine. Move along...Connection status: normalAborted: noInfo: Everything is fine. Move along...Connection status: normalAborted: noInfo: Everything is fine. Move along...Connection status: normalAborted: noError: Connection closed by user!Connection status: abortedAborted: yes


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/383483.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号