Пролог правильно использовать параметр post
Я хочу создать динамический сайт с вопросами, с некоторыми полями прокрутки, проверки и тому подобного. После того, как пользователь отправил форму, я хочу использовать информацию, чтобы динамически создать ответ. Я очень старался, но не мог заставить его работать должным образом. Надеюсь, вы можете помочь.
get_event( 'Event_1', 1 ).
get_event( 'Event_2', 5).
get_component( 'Type_1', 'Component_1' ).
get_component( 'Type_2', 'Component_2' ).
get_incident( 'Incident_1' ).
get_incident( 'Incident_2' ).
index( Request ) :-
reply_html_page(
[
title('Questions')
],
[
form( [ id( search ), action(answer), method(post)],
[
h1('All Questions'),
div( [ h4('Question_1')
|\selection ]),
div( [ h4('Question_2')
|\component ]),
div( [ h4('Question_3')
|\event ]),
input( [ type( submit ), value( 'Submit' )])
])
]).
event -->
{ event( Ls ) },
html( [ div( Ls )]).
event( Ls ) :-
findall( span( [ input( [ value = Priority, name = Event, type = 'checkbox' ] ), Event ] ), get_event( Event, Priority ), Ls ).
component -->
{ component( Ls ) },
html( [ div( Ls )]).
component( Ls ) :-
findall( div( [ input( [ name = Component, value = [Type, ',', Component ], type = 'checkbox' ]), Component ]), get_component( Type, Component ), Ls ).
selection -->
{ selection( Ls ) },
html( [ div( select( Ls ))]).
selection( Ls ) :-
findall( option( [ name = Incident, value = Incident ], Incident ), get_incident( Incident ), Ls ).
Теперь я хочу использовать эту информацию в качестве параметров публикации. Я нашел 2 решения, http_parameters/3 и с member( method(post), Request)..., но не смог заставить его работать. Как я могу распечатать все эти параметры на веб-сайте?
1 ответ
См., Например, http://www.swi-prolog.org/howto/http/HTMLParams.html для примера обработки параметров. Предикат http_parameters/3 обрабатывает как GET-запросы, так и POST-запросы, при условии, что размещенный контент кодируется как www-form-encoded (это то, что браузер делает для формы с method="POST"). Вам не нужен member(method(post), Request)
, если вы действительно не хотите, чтобы обработчик работал только для POST-запросов. По умолчанию это будет работать для обоих.