表单未提交到正确的服务器脚本

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-parameterxmldb:decode 来获取文档。像这样:

let $p := request:get-parameter( "postdata", "" );
let $doc := xmldb:decode( $p );
return $doc