2010-11-13 29 views
1

我有一個網頁,它有一個通過POST提交的表單。此POST路由處理一些數據並將用戶重定向到GET路由。問題:GET路由被多次調用,通常是3次。所以三個GET被觸發,用戶看到了第一個GET請求。其他兩個GET請求我可以在我的日誌中看到。發佈/重定向/獲取:獲取被多次調用

有時甚至發生了GET被稱爲三次以上...

(當然POST路線就被稱爲一次...)

通過我使用JRuby的方式/ Jetack/Sinatra on Jetty( - > Google App Engine)。問題發生在本地和遠程。

菲利普

+0

我已經看到服務器*在POST請求後的響應是302,c.f.這裏http://www.gittr.com/index.php/archive/details-of-sinatras-redirect-helper/我將代碼更改爲303,但問題保持不變... – Philip 2010-11-13 16:08:26

+0

我能夠調試問題更多:在GET響應HTML中,有一個Javascript使用相對URL從服務器加載圖像。 (/image/some_image.png)如果我刪除加載圖像的代碼,問題不會發生。實際上,在響應圖像GET時,服務器發送一些304東西(匹配請求的序列號)...反正我可以通過使URL絕對地包括主機名來解決問題... – Philip 2010-11-18 01:52:59

+0

它可能有助於發佈(a)驗證您的客戶端沒有發送多個GET請求,(b)分別執行POST和GET請求以驗證POST請求是否觸發了多餘的GET。您可以使用'curl -vL'來詳細地打印發出的請求並遵循重定向,並使用ctrl-z&'fg'(如果在Linux上)在POST和GET之間暫停以檢查您的服務器日誌。 – 2010-11-22 15:35:33

回答

0

不知道沒有看到代碼,但在大多數情況下,腳本將繼續重定向函數的調用後執行。在調用redirect_to之後立即嘗試從你的方法返回。

+0

Sinatra是非常高的水平,所以它在調用重定向後離開函數。正如人們所期望的那樣,HTTP消息體是空的。 – Philip 2010-11-13 16:10:36

+0

我不熟悉Sinatra - 在Rails控制器中,從動作返回將終止控制器。在更高的抽象層次上應該有一些等價物,如exit(0)來終止PHP腳本。 – Thilo 2010-11-13 16:16:44

+0

我剛剛檢查了一下,但在Sinatra重定向後的返回語句沒有任何區別,因爲沒有達到。但是它是類似的,Sinatra中的return語句完成了響應,然後該實例可以用於處理下一個請求。 – Philip 2010-11-15 11:38:43

-3

代碼中存在一個邏輯錯誤。修理它。

3

我在我的代碼之前(雖然不同的平臺)有同樣的問題。原來,這是頁面中引用與頁面相同的url的元素。我有1個損壞的圖像和2個被忽略的CSS文件已被設置爲父頁面。

如果是同一類問題,您可以使用Firebug的網絡標籤來驗證和調試。

+0

我認爲它略有不同,螢火蟲只是表明,everthings是正常的... – Philip 2010-11-23 20:42:02