2011-12-08 35 views
1

我看到錯誤日誌是由於似乎是發佈數據的截斷引起的。在調試之後,我的猜測是問題在於我們使用xmlhttprequest來發布帖子,並且用戶在完成發佈數據發送之前關閉瀏覽器。PHP能檢測到不完整的xmlhttprequest.send(data)命令嗎?

這裏是我們的js代碼:

httpReq = new XMLHttpRequest(); 
httpReq.open("POST", url,false); 
httpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
httpReq.send(param); 

有沒有一種方法來檢測不是尋找在那裏失蹤後的參數以外的PHP端一個不完整的發送? (我們不能這樣做,因爲他們是動態的。)

2011-02-27編輯:

舉例來說,客戶端發送這樣的:

&obj1_name=Greeting&obj1_type=string&obj1_value=hello&obj1_id=34 

的obj1_id是一個必填字段,用於存儲有關對象的其餘詳細信息。但有時我們收到一個字符串,如:

&obj1_name=Greeting&obj1_type=string 

我的目標是告訴一個破碎的客戶端之間的(一個地方意味着發送短字符串),我們需要解決和工作的客戶區別,那被關閉得太早(其中意思是發送長字符串),並且我們可以將錯誤註銷爲不可避免的。

回答

0

我意識到我們只是需要來自客戶端的更多信息才能做到這一點。 爲了達到這個目的,我們在客戶端添加了一個已知的終止值。如果服務器看到它時沒有設置最終參數,那麼這是一個不完整的提交。

1

你可以看看這個功能:connection_aborted。 如果您設置ignore_user_abort(true),則此方法僅適用。 即使用戶點擊中止按鈕,腳本現在仍將繼續運行。 然後必須檢查connection_aborted函數並在必要時丟棄數據。

另一種方法是在腳本的末尾保存某種標誌,將數據標記爲完全處理。如果該標誌未設置,則可以丟棄數據。

+0

我會給你一個鏡頭,謝謝。 – VexedPanda

+0

對不起,延遲迴復。這似乎並不奏效。我補充說: ob_implicit_flush(); if(connection_aborted()) {strContents。='!!! Connection Aborted !!!'; } 但我們從來沒有在日誌中獲得該評論。 – VexedPanda

+0

另外嘗試調用'ignore_user_abort(true)',這樣腳本在客戶端中止並有機會寫入日誌時仍能運行。 – Alex

0

我不會這麼想,因爲PHP是服務器端,XmlHttpRequests是客戶端。