2011-12-14 70 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