0

我有一个包含这些文件的 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();
?>
4

1 回答 1

3

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

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

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

编辑:好的,既然我已经考虑了一段时间,我可以看到当你不使用输出缓冲时,如果浏览器一看到它就执行脚本(没有整个页面加载)。如果情况确实如此,那么您仍然依赖浏览器的时间、用户互联网连接的质量等来保持同步。这绝对不是一件好事。

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

于 2009-08-03T09:35:37.113 回答