我有一个PHP应用含有这些文件:landing.php,redirect.php,ajax.php

在一个页面上的呼叫 landing.php, 我执行一个javascript code捕获某些数据,并发出阿贾克斯后来 ajax.php 其中插入他们进入数据库。最后php header() 重定向到 redirect.php

目前上述特征是使用产出的缓冲,但是 header() 执行太快,AJAX后没有完成..即,没有数据库查询。

我试图使用 sleep() usleep() 之前 header() 但他们没有工作。因为我不是很熟悉的产出的缓冲,请你提供一种手?

谢谢你。

<?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();
?>
有帮助吗?

解决方案

如果我理解正确的话,你有一个根本性的误解如何维网应用程序的工作。

你PHP script不能等待的AJAX位来执行,因为整个脚本是第一个在服务器上运行,并输出--一部分的阿贾克斯呼叫--然后被送到浏览器。你要重新考虑你的方式这样做。

例如,你可以有JavaScript首先使阿贾克斯通话,然后向浏览器。

编辑:OK,现在我已经想过这一段时间更多,我可以看到这样的事情 可能会 工作时不使用产出的缓冲,如果浏览器执行的脚本,只要它认为它(不具有的全部装载的页).如果那确实是这样的,然后你仍然依靠浏览器的时间、质量的用户的互联网连接和使上保持同步。这显然是 一件好事。

然而,只有这样,才可能的工作是如果阿贾克斯呼吁得到了输出到浏览器之前,你的头呼吁--这是不可能的!标题需要发送以前的内容在HTTP的应对(这是为什么你使用缓冲输出的第一个地方),所以要么你就不会输出JavaScript或头呼吁将失败。所以我建议你重新考虑你的方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top