1

RestXQ で JSONP を返す方法がわかりません。関数に追加 let $x := util:declare-option("exist:serialize", fn:concat("method=json jsonp=",request:get-parameter("callback", "callback"))) した後、次のエラー メッセージが表示されます。

err:XPTY0004: 静的解析段階で、式が発生するコンテキストに適していない静的型を持つ式が見つかった場合、または動的評価段階で動的型の動的型が見つかった場合は型エラーです。値が、2.5.4 SequenceType マッチングのマッチング ルールで指定されている必要なタイプと一致しません。

GET 関数の冒頭は次のとおりです。

declare
    %rest:GET
    %rest:path("/demo/contacts/submit")
    %rest:query-param("email", "{$email}", '')     
    %rest:query-param("nomail", "{$nomail}", 0)    
    %rest:produces("application/javascript")
    %output:media-type("application/javascript")
    %output:method("json")
function contacts:submit($email as xs:string*, $nomail as xs:integer*)
{


    try
    {

        let $x := util:declare-option("exist:serialize", fn:concat("method=json jsonp=",request:get-parameter("callback", "callback")))
4

2 に答える 2

3

eXist-open メーリング リストで議論されているように (参加することをお勧めします!)、リクエスト モジュールのget-parameter()関数は RestXQ 関数内では使用できません。代わりに、アノテーションcallbackを介してパラメーターを取得できます。あなたの機能に%rest:query-param追加すると、一歩近づくと思います。%rest:query-param("callback", "{$callback}", '')contacts:submit()

于 2015-03-14T01:42:47.943 に答える
2

@joewizは正しいです。最初の問題は、サポートされていない RESTXQ の eXist リクエスト モジュールの使用に関連しています。

また、現在RESTXQ はJSONP シリアル化をサポートしていません。JSONP シリアライゼーションを使用する場合、現時点で最善の策は、JSON へのシリアライゼーションを自分で管理することです。おそらく xqjson ライブラリなどを使用してから、concat などを使用して結果を JSON 関数にラップします。

于 2015-03-16T18:08:44.273 に答える