2011-12-14 71 views
0

我遇到了一些Ruby CGI的問題。從當前頁面重定向到新頁面

我有一個主頁(index.cgi),它是HTML和Ruby的混合體,並且有一個登錄表單。

點擊提交按鈕後,POST的操作是同一頁面(index.cgi),此時我檢查以確保用戶已將數據輸入到正確的字段中。

我有一個計數器,每增加一個字段就會增加1。如果此計數器爲0,我想將當前加載的頁面更改爲諸如contents.html之類的內容。

有了這個,我有:

if (errorCount > 0) 
    do nothing 
else 
    .... 
end 

我需要什麼,把在那裏我有......?


不幸的是我不能使用任何框架,因爲這是大學課程,所以必須使用基本的Ruby。

至於使用您建議的CGI#標頭方法,我嘗試過使用它,但它不適合我。

如上所述,我的頁面是index.cgi。這是使用「here doc」語句的Ruby和HTML的混合體。

在我的代碼頁的頂部,我有我的shebang行,後面跟着一個HTML頭語句。

然後我做了CGI表單驗證的一部分,在這個我已經嘗試做類似的事情:print this.cgi({'Status'=>'302 Moved','location'=> '{http:/ /localhost:10000/contents.html'})

所發生的只是這行打印在瀏覽器窗口的頂部,位於我的index.cgi頁面上方。

我希望這是有道理的。

+0

沒有看到源代碼,我們的能力是有限的。 –

+0

您必須在任何其他輸出之前發送標題,否則CGI將爲您創建默認標題。我通過一個非常簡單的例子鏈接更新了我的答案。 – gioele

+0

Gioele,非常感謝您的幫助。我犯了一個愚蠢的錯誤,在我的文件頂部放置「puts」Content-Type:text/html \ n \ n「」。我現在已經將它移動到我的表單驗證腳本(具有重定向語句)下面並且它可以工作。 – Nick

回答

1

要將瀏覽器重定向到另一個URL,您必須輸出包含Location: /foo/bar標頭的30X HTTP響應。您可以使用CGI#header方法來做到這一點。

而不是處理您尚未掌握的這些細節,我建議您使用一個簡單的框架,如Sinatra,或者至少將您的腳本編寫爲Rack兼容的應用程序。

如果你真的需要使用裸CGI類,看看這個簡單的例子:https://github.com/tdtds/amazon-auth-proxy/blob/master/amazon-auth-proxy.cgi

+0

OP更新了他的問題,並提供了一些更多的信息來回答你的答案。 –

+0

我昨天曾多次嘗試使用「添加評論」框,但沒有奏效。 – Nick

+0

新用戶只有在獲得某些信譽積分後才能發表評論。但是,您可以也應該接受使用幫助您解決問題的答案上的「接受」按鈕;) – gioele