我在使用 SWI-Prolog 的 CGI 库传递输入 type="hidden" 表单时遇到问题。具体来说,我这样做:
<form id="frmCGIPrologIni" name="frmCGIPrologIni" method="post" action="http://localhost/cgi-bin/x.pl"> <p><input type="hidden" name="initial" value="ini" /> <input class="submit" type="submit" value="Start" /> </p></form>
当程序 x.pl 调用时,cgi_get_form(Arguments)
Arguments 应该是 Name(Value) 术语的列表,即:[Name, Value],所以它应该是 [initial(ini)]。
但是当我使用它时它说:错误:=../2:参数没有充分实例化
print_args([]).
print_args([F|T]) :- % with Arguments
F =.. [Name, Value], % and should continue doing things
我尝试使用 write(Arguments) 手动打印它,我得到的是:_L160
,打印第一个元素是:_G472
并且 write_canonical(Arguments) 返回:'.'(_,_)
我也尝试使用 method="get" 来检查它,它会正确打印 URI,http://localhost/cgi-bin/x.pl?initial=ini
所以我猜这不是提交问题,而是使用 cgi_get_form(Arguments) 处理的问题。
第一次运行“http://localhost/cgi-bin/x.pl”时,我会这样做:
cgi_get_form(Arguments),
(Arguments = []) ->
(
format('<p>Print this as the index.</p>~n', []),
) ; true, % and it works well because there are no Arguments the first time
write('<p>'), write(Arguments), write('</p>'), nl, % and print other things
问题是第二次。这次调用同一个程序有参数所以它不打印消息,到这里一切都很好。然后通过 true 并继续。那是我尝试使用之前解释的结果编写(参数)的时候(_L160
)。结果应该是表单传递的数据。
有什么想法吗?