如果我有像这样的HTML表单:
<form action="test" method="post">
<input name="first_name" type="text"/>
<input name="last_name" type="text" />
<input name="age" type="text" />
<input type="submit" value="Send"/>
</form>
,如何获取输入字段的值并将其打印在屏幕上,就像在PHP,ASP或JSP等任何其他过程编程语言中一样?
我试图通过以下方式解决问题:
:- use_module(library(http/thread_httpd)).
:- use_module(library(http/http_dispatch)).
:- http_handler(root(test), reply, []).
:- http_handler('test', reply, []).
server(Port) :-
http_server(http_dispatch, [port(Port)]).
reply(Request) :-
member(method(post), Request), !,
http_read_data(Request, Data, []),
format('application/x-www-form-urlencoded', []),
format(Data).
,但这只会带来代码“500”的错误(内部服务器错误)。
答案 0 :(得分:3)
您应该使用http/http_client
库(:- use_module(library(http/http_client))
)。
此外,我不确定如何让两个测试处理程序工作。 最后,我认为格式(数据)可能不起作用,特别是因为它应该返回一个html文档。
顺便说一句,要检索字段的值,您可以执行以下操作:
http_read_data(Request, [first_name=FN, last_name=LN, age=A|_], []).
我对http prolog lib很新,我建议检查http://www.pathwayslms.com/swipltuts/html/
答案 1 :(得分:3)
基本上,您将像正常一样处理请求,检查请求中的方法(方法)术语是方法(帖子)。
http_read_data将读取请求正文。 正文将被编码为URI查询字符串,因此uri_query_components / 2 会将其转换为Key = Value terms
列表? - uri_query_components('a = b&amp; c = d%2Bw&amp; n = VU%20Amsterdam',Q)。 Q = [a = b,c ='d + w',n ='VU Amsterdam']。
对于寻找类似信息的其他人 - 如果您的回复是json,则可以使用read_json_dict将数据作为词典获取。
答案 2 :(得分:2)
我使用library(http/http_parameters)
。有了这个,我可以做到
load_graph(Request) :-
http_parameters(Request,
[path(Path, [atom]),
aperture(Aperture, [integer])]),
其中load_graph是表单的处理程序
...
html(form([action(Ref)],
dl([dt('Root Path'), dd(input([name=path, type=text, value=Default])),
dt('Aperture'), dd(select([name=aperture], Aplist)),
dt('Go!'), dd(input([type=submit, value='Load!']))
]))).