2009-08-03 132 views
0

我有一个包含这些文件的PHP应用程序:landing.php,redirect.php在页面调用,ajax.phpPHP usleep /睡眠

landing.php,我执行JavaScript代码捕获某些数据,并发布AJAX POST到ajax.php,将它们插入到数据库中。最后PHP的header()函数重定向到redirect.php

目前上述功能是通过输出缓冲,但header()函数太快,所述AJAX POST不finished..ie执行时,没有数据库查询已完成。

我尝试使用睡眠()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(); 
?> 

回答

3

如果我正确地理解了你,你对web应用程序的工作原理有一个根本性的误解。

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

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

编辑:好了,现在,我已经想了会儿,我可以看到这样的事情威力的工作,当你不使用输出缓冲,如果浏览器尽快执行脚本它看到它(没有加载完整的页面)。如果确实如此,那么您仍然依靠浏览器的时间,用户的互联网连接质量等来保持同步。那肯定是不是好东西。

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

+1

有没有理由通过AJAX调用来保存东西?如果您想先将数据保存到数据库然后重定向,为什么不在PHP脚本中完成所有操作?无论如何,这是明显的方法。 :) – Rytmis 2009-08-03 10:33:32