我如何在 RestXQ 中 return JSONP(使用 eXist-db)?

How can I return JSONP in RestXQ (using eXist-db)?

我不知道如何在 RestXQ 中 return JSONP。添加后 let $x := util:declare-option("exist:serialize", fn:concat("method=json jsonp=",request:get-parameter("callback", "callback"))) 到函数,我收到错误消息:

err:XPTY0004:It is a type error if, during the static analysis phase, an expression is found to have a static type that is not appropriate for the context in which the expression occurs, or during the dynamic evaluation phase, the dynamic type of a value does not match a required type as specified by the matching rules in 2.5.4 SequenceType Matching.

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")))

As discussed on the eXist-open mailing list (I'd suggest joining!),请求模块的 get-parameter() 函数在 RestXQ 函数中不可用。相反,您可以通过 %rest:query-param 注释获取 callback 参数。将 %rest:query-param("callback", "{$callback}", '') 添加到您的 contacts:submit() 函数,我想您会更近一步。

@joewiz 是正确的。您最初的问题与使用来自 RESTXQ 的 eXist 请求模块有关,该模块不受支持。

此外,RESTXQ 目前不支持JSONP 序列化。如果你想使用 JSONP 序列化,目前最好的办法是自己管理 JSON 的序列化,也许使用 xqjson 库或类似库,然后将结果包装在 JSON 使用 concat 或类似函数。