2009-08-03 127 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