繁体   English   中英

PHP usleep / sleep在输出缓冲区内

[英]PHP usleep/sleep inside output buffer

我有一个包含以下文件的PHP应用程序:landing.php,redirect.php,ajax.php

在对Landing.php的页面调用中,我执行了JavaScript代码以捕获某些数据,并向ajax.php发出AJAX POST,将其插入到数据库中。 最后,php header()重定向到redirect.php

当前,上述功能正在使用输出缓冲,但是header()执行得太早,以至于AJAX POST尚未完成。即,没有进行数据库查询。

我尝试在header()之前使用sleep() usleep() ,但是它们无法正常工作。 由于我对输出缓冲不是很熟悉,请您提供帮助吗?

谢谢。

<?php ob_start(); ?>

<scripts type="text/javascript">
var data = 'blah..blah..blah..';
ajaxPost('ajax.php', data);
</scripts>

<?php
sleep(2);    // <---- I want the script to sleep here and wait for the AJAX to finish
header('c.php)
ob_end_flush();
?>

如果我对您的理解正确,那么您将对Web应用程序的工作方式产生根本性的误解。

您的PHP脚本不能等待AJAX​​位执行,因为整个脚本首先在服务器上运行,然后将输出(其中一部分是AJAX调用)发送到浏览器。 您必须重新考虑执行此操作的方式。

例如,您可以让JavaScript首先进行AJAX调用,然后重定向浏览器。

编辑:好的,现在我已经考虑了一段时间,如果浏览器在看到脚本后立即执行脚本,那么我可以看到当您不使用输出缓冲时,类似的东西可能会如何工作。加载的完整页面)。 如果确实如此,那么您仍将依靠浏览器的时间安排,用户互联网连接的质量等等来保持同步。 那绝对不是一件好事。

但是,唯一可行的方法是在标题调用之前将AJAX调用输出到浏览器-这是不可能的! 需要在HTTP响应中的内容之前发送标头(这就是为什么首先使用输出缓冲的原因),因此您将不会输出JavaScript或标头调用将失败。 因此,我建议您重新考虑您的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM