jQuery.ajax()是「請求結束時調用的函數」。假設我正在做一個Ajax請求ajax.php:什麼時候jQuery.ajax()完成{}?
<?php
echo 'complete';
some_functions_that_echo_nothing();
?>
將完整必須等待some_functions_that_echo_nothing()?如果是這樣,是否有辦法讓完整的{}直接在echo之後出現,並且仍然讓ajax.php一直運行到最後?
jQuery.ajax()是「請求結束時調用的函數」。假設我正在做一個Ajax請求ajax.php:什麼時候jQuery.ajax()完成{}?
<?php
echo 'complete';
some_functions_that_echo_nothing();
?>
將完整必須等待some_functions_that_echo_nothing()?如果是這樣,是否有辦法讓完整的{}直接在echo之後出現,並且仍然讓ajax.php一直運行到最後?
我不知道HttpResponse是如何工作的。它只是返回響應並保持腳本繼續?這對我來說似乎很奇怪。不會持有你的Apache線程。所以這會降低服務器的性能? – Eduardo 2011-05-11 01:11:47
@eduardocereto。服務器接受一個包含所有數據的HTTP請求。然後你開始寫回應。 'echo'基本上是'HTTPResponse :: write()'。當您發送HTTP響應時,您將HTML直接發送回客戶端。然後你可以繼續做一些處理。一旦你到達文件的末尾,你的處理應該停止。所有這一切都是提前發回頁面,然後正常。 – Raynos 2011-05-11 08:01:14
Apache線程怎麼樣? – Eduardo 2011-05-11 18:07:15
我猜你要輸出「完成」,並讓背景功能運行,因爲它是非常緩慢的。
在這種情況下,把這個功能放在一個單獨的文件中。讓它成爲proc.php
並用這個代替:
<?php
echo "Complete';
exec ("/usr/bin/php proc.php >/dev/null &");
?>
這將立即返回並觸發proc.php
文件在後臺運行。當然,它不能輸出它返回給用戶,所以它應該在用戶完成時郵寄給用戶,或者做他自己的持久性。
編輯:ALWAYS採取格雷亞照顧你把裏面exec
語句。如果您不是100%確定您正在非常仔細地對其進行消毒,請勿將用戶輸入放入其中。即使如此,您確實沒有充分的理由將用戶輸入用於撥打exec
。
只需結束HTTP響應。 – Raynos 2011-05-09 20:32:15
是的,請求一直持續到PHP腳本執行結束。 – 2011-05-09 20:48:50