2010-11-03 42 views
0

如何在填寫多部分表格的一個或多個表格(零件)後檢查用戶是否關閉了窗口,但不是所有零件。如何在「if」條件下檢查php中的窗口關閉事件?

我必須將從多部分表格的所有/某些部分收集的數據發送到外部服務器。

一個條件是,我只能將數據發送到外部服務器一次完整的表單。

編輯:後2個answersi已經編輯我的問題有點

+1

簡單的答案是:你不能。爲什麼?因爲php運行在服務器上,並且對客戶端發生的事情一無所知。您需要使用javascript來檢測客戶端發生了什麼。如果啓用了javascript,則可以使用它將信息發送回您的應用程序。 – some 2010-11-03 18:24:26

回答

2

考慮使用window.onbeforunload

+0

我怎麼能在php中做到這一點?在php的「if」條件下,我必須檢查window.onbeforeload事件 – texpert 2010-11-03 18:16:33

1

PHP是一個服務器端語言。您應該使用JavaScript的onbeforeunload()進行瀏覽器端操作。

1

這總是一個複雜的主題,因爲HTTP是一種無狀態協議。

Javascript可能是一個不太可靠的解決方案。使用事件或ajax繼續發送所有內容都是一些可能的解決方案。

從服務器端的角度來看,您可以處理從User-Agent發送的數據和信號。您有a few ways to check connection status with PHP

總之你可以檢查3個信號: - 師範大學 - 中止 - TIMEOUT

普通意味着什麼意想不到的事情發生。 中止信號意味着用戶在加載時單擊了STOP按鈕。 超時由服務器觸發,如果進程需要很長時間(此信號與服務器向用戶發送超時的方式相同)。

請注意,如果用戶在頁面加載(頁面加載,填滿一半表格並關閉窗口)後關閉了一個窗口,或者在頁面加載之後發生斷電,網線跳動或其他任何事情,狀態仍然是NORMAL。

是的,它很糟糕。您無法控制用戶在服務器端執行的操作。您需要一種方法來控制來自客戶端的方式,這裏是javascript來得方便的地方。

我希望在不久的將來能夠使用web套接字和web工作者來處理這種問題以及register_tick_function。雖然我們在這個主題上沒有達到UA的支持,但只能使用一些腳本。