0

我为发布请求测试做了一个简单的测试表格。

我的简单目标是:发送带有 2 个参数的 POST 请求,将服务器响应存储在实例中(服务器只是将收到的参数发送回表单,未触及)

 <xf:model>
        <xf:instance id="request" xmlns="">
            <data>
                <arg1>param1</arg1>
                <arg2>param2</arg2>
            </data>
        </xf:instance>

        <xf:instance id="response" xmlns="">
           <null/>
        </xf:instance>

        <xf:submission id="post-instance"
                        method="put" 
                        replace="all"
                        instance="response"
                        resource="adderPost.xq"
                        ref="instance('request')"
                        serialization="application/xml"
                        mediatype="application/xml"
                        includenamespaceprefixes=""
                        >
        </xf:submission>
  </xf:model>

</head>
<body>
    <h1>XForm interaction with XQuery</h1>
    <xf:input ref="instance('request')/arg1" incremental="true">
        <xf:label>Arg1:</xf:label>
    </xf:input>
    <br/>
    <xf:input ref="instance('request')/arg2" incremental="true">
        <xf:label>Arg2:</xf:label>
    </xf:input>
    <br/>
    <xf:output ref="instance('response')/result">
        <xf:label> Response:</xf:label>
    </xf:output>
    <br/>

    <xf:submit submission="post-instance">
        <xf:label>Post</xf:label>
    </xf:submit>
    <p id="status"></p>
</body>

如果我使用参数 replace="all",如上面的代码所示,服务器返回答案:

<?xml version="1.0" encoding="UTF-8"?>
<result>
    <arg1>param1</arg1>
    <arg2>param2</arg2>
</result>

但是,如果我使用参数 replace="instance" instance="response"

这发生了:

    throw 'allowScriptTagRemoting is false.';
    (function(){
    var r=window.dwr._[0];
    //#DWR-INSERT
    //#DWR-REPLY
    r.handleCallback("2","0",[{bubbles:true,cancelable:false,contextInfo:{"resource-uri":"http://10.40.171.50:8080/exist/apps/RBS_path/adderPost.xq",
"response-headers":[null /* No converter found for 'net.sf.saxon.dom.NodeWrapper' */,null /* No converter found for 'net.sf.saxon.dom.NodeWrapper' */,null /* No converter found for 'net.sf.saxon.dom.NodeWrapper' */,null /* No converter found for 'net.sf.saxon.dom.NodeWrapper' */,null /* No converter found for 'net.sf.saxon.dom.NodeWrapper' */],
targetId:"post-instance",targetName:"submission",
"response-reason-phrase":"OK",
"response-status-code":200.0},currentTarget:null,eventPhase:1,
propertyNames:["resource-uri","response-headers","targetId","targetName","response-reason-phrase",
"response-status-code"],target:null,timeStamp:1437294248749,
type:"xforms-submit-done"}]);
    })();

Response Headers:
Content-Length:935
Content-Type:text/javascript; charset=utf-8
Date:Sun, 19 Jul 2015 08:24:08 GMT
Server:Jetty(8.1.9.v20130131)
4

1 回答 1

1

如果你想替换一个实例 replace="instance" 是要走的路,通过使用 replace="all" 你将替换整个页面。我还注意到你使用 method="put",如果你想发布你应该使用 method="post"。

有关工作示例,请参阅http://pastebin.ubuntu.com/11908113/ (xforms) 和http://pastebin.ubuntu.com/11908115/ (xquery)。

于 2015-07-20T08:32:39.353 回答