2010-12-22 75 views
1

我有一個CGI腳本,可以處理很多事情。我試圖保持腳本非常簡單和便攜。我只需要一些方法讓用戶向服務器發送消息,而不必丟失當前頁面。到目前爲止,我有以下過程:如何通過HTTP返回「noop」文檔

  1. 用戶從CGI腳本加載「狀態頁面」。
  2. 狀態頁面有一個javascript定時器,它將每兩秒從服務器讀取數據(而不是整個頁面)並相應地更改狀態頁面。
  3. 用戶單擊超鏈接元素可在服務器上啓動作業。
  4. CGI從點擊接收參數並啓動作業。
  5. 的CGI發送的\n

此時的響應的Firefox會詢問用戶是否要下載的CGI腳本,當然劇本只是\n的CGI發送。相反,我希望瀏覽器完全忽略響應。如果我的CGI腳本沒有迴應\n apache會給出錯誤。我能做些什麼來告訴瀏覽器忽略響應並保持當前頁面?請注意,我寧願不重新加載當前頁面。我在想這種情況下肯定會有某種「noop」HTTP響應。

+0

FWIW,術語是「NOP」。 – 2010-12-22 00:08:47

+3

@Noon:術語[NOOP](http://ftpguide.com/NOOP.htm)[同樣有效](http://en.wikipedia.org/wiki/NOP)。 – cdhowie 2010-12-22 00:10:38

+1

如何妥協:NO½P – User1 2010-12-22 00:14:46

回答

3

用204 HTTP狀態碼發送迴應。從RFC 2616 aka Hypertext Transfer Protocol -- HTTP/1.1

10.2.5 204無內容

服務器已完成要求 但並不需要返回 實體主體,並且可能要返回 更新的元信息。響應 可能包含新的或更新的 元信息,其形式爲 實體標題,如果存在 應該與 請求的變體相關聯。

如果客戶端是用戶代理,則它應該不會將其文檔視圖 從導致請求發送到 的請求更改爲 。這種反應主要是 旨在允許輸入用於操作至 發生而不引起的改變 用戶代理的活動文檔視圖, 雖然任何新的或更新 元信息應該在當前應用於 該文檔的用戶 劑的活性視圖。

204響應不得包含一個 消息體,因此總是 由頭字段後的第一個空行 終止。

1

您可能想要調查客戶端解決方案,而不是試圖解決服務器端的這個問題。例如,使用jQuery,您可以通過單擊按鈕輕鬆啓動AJAX asynchronous request到服務器。根本不需要在瀏覽器上加載新頁面。

1

而不是超鏈接是一個真正的<a><form>與默認行爲,讓它是一些點擊由您的客戶端代碼處理的點擊元素。 Javascript代碼應該使用XMLHttpRequest對象發送作業請求,並完全控制響應的處理方式。