表单未提交到正确的服务器脚本
Form not submitted to correct server scgript
我正在尝试使用回显服务测试此 XForm 的提交(我有自己的回显 Xquery 脚本,但也尝试使用基于 Web 的脚本进行测试,您可以在代码示例中看到)。我的检查显示 xforms-submit-done 事件确实被触发,但提交资源属性中的脚本没有被调用。相反,我得到了一个空白页,并且 url 保持不变。
代码如下。
<html xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:html="http://www.w3.org/1999/xhtml" xmlns:xf="http://www.w3.org/2002/xforms" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Movie Review Selector</title>
<model xmlns="http://www.w3.org/2002/xforms">
<instance id="movies">
<movies xmlns="">
<movie id=""></movie>
</movies>
</instance>
<submission id="save" resource="http://xformstest.org/cgi-bin/echo.sh" method="post" replace="all">
<xf:message ev:event="xforms-submit-error" level="modal">Submission Error<xf:output value="event('error-type')"></xf:output>
</xf:message>
</submission>
</model>
</head>
<body>
<fieldset>
<legend>
<h3>Movie Selector</h3>
</legend>
<group xmlns="http://www.w3.org/2002/xforms" ref="instance('movies')">
<repeat nodeset="movie" id="idx">
<input ref="@id">
<label>Movie Id</label>
</input>
<trigger>
<label>Delete</label>
<delete nodeset="." ev:event="DOMActivate"></delete>
</trigger>
</repeat>
<trigger>
<label>Add</label>
<action ev:event="DOMActivate">
<insert nodeset="movie"></insert>
<setvalue ref="movie[last()]/@id" value=""></setvalue>
</action>
</trigger>
<submit submission="save">
<label>Submit</label>
</submit>
</group>
</fieldset>
</body>
</html>
由于浏览器的限制,无法在 XSLTForms 中使用 POST 方法和 replace="all"
。
相反,您必须使用 method="xml-urlencoded-post"
,这是一种仅适用于 XSLTForms 的 hack。您不会在服务器中获得纯 XML 正文,但它会位于名为 postdata
的表单字段中
查看此线程以获得更深入的解释:http://sourceforge.net/p/xsltforms/mailman/message/24455248/
XQuery 脚本应该使用 request:get-parameter
和 xmldb:decode
来获取文档。像这样:
let $p := request:get-parameter( "postdata", "" );
let $doc := xmldb:decode( $p );
return $doc
我正在尝试使用回显服务测试此 XForm 的提交(我有自己的回显 Xquery 脚本,但也尝试使用基于 Web 的脚本进行测试,您可以在代码示例中看到)。我的检查显示 xforms-submit-done 事件确实被触发,但提交资源属性中的脚本没有被调用。相反,我得到了一个空白页,并且 url 保持不变。
代码如下。
<html xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:html="http://www.w3.org/1999/xhtml" xmlns:xf="http://www.w3.org/2002/xforms" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Movie Review Selector</title>
<model xmlns="http://www.w3.org/2002/xforms">
<instance id="movies">
<movies xmlns="">
<movie id=""></movie>
</movies>
</instance>
<submission id="save" resource="http://xformstest.org/cgi-bin/echo.sh" method="post" replace="all">
<xf:message ev:event="xforms-submit-error" level="modal">Submission Error<xf:output value="event('error-type')"></xf:output>
</xf:message>
</submission>
</model>
</head>
<body>
<fieldset>
<legend>
<h3>Movie Selector</h3>
</legend>
<group xmlns="http://www.w3.org/2002/xforms" ref="instance('movies')">
<repeat nodeset="movie" id="idx">
<input ref="@id">
<label>Movie Id</label>
</input>
<trigger>
<label>Delete</label>
<delete nodeset="." ev:event="DOMActivate"></delete>
</trigger>
</repeat>
<trigger>
<label>Add</label>
<action ev:event="DOMActivate">
<insert nodeset="movie"></insert>
<setvalue ref="movie[last()]/@id" value=""></setvalue>
</action>
</trigger>
<submit submission="save">
<label>Submit</label>
</submit>
</group>
</fieldset>
</body>
</html>
由于浏览器的限制,无法在 XSLTForms 中使用 POST 方法和 replace="all"
。
相反,您必须使用 method="xml-urlencoded-post"
,这是一种仅适用于 XSLTForms 的 hack。您不会在服务器中获得纯 XML 正文,但它会位于名为 postdata
查看此线程以获得更深入的解释:http://sourceforge.net/p/xsltforms/mailman/message/24455248/
XQuery 脚本应该使用 request:get-parameter
和 xmldb:decode
来获取文档。像这样:
let $p := request:get-parameter( "postdata", "" );
let $doc := xmldb:decode( $p );
return $doc