如何在RestXQ中返回JSONP(使用eXist-db)?

时间:2015-03-12 22:53:53

标签: jsonp xquery exist-db restxq

我无法弄清楚如何在RestXQ中返回JSONP。添加后 let $x := util:declare-option("exist:serialize", fn:concat("method=json jsonp=",request:get-parameter("callback", "callback"))) 到函数,我收到错误信息:

  

错误:XPTY0004:如果在静态分析阶段发现表达式具有不适合表达式发生的上下文的静态类型,或者在动态评估阶段,则为类型错误值的动态类型与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")))

2 个答案:

答案 0 :(得分:2)

在eXist-open邮件列表上的discussed(我建议joining!),请求模块的get-parameter()功能在RestXQ中不可用功能。相反,您可以通过callback注释获取%rest:query-param参数。将%rest:query-param("callback", "{$callback}", '')添加到您的contacts:submit()功能中,我认为您将更近一步。

答案 1 :(得分:1)

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

此外,RESTXQ 当前不支持JSONP序列化。如果你想使用JSONP序列化,那么你最好的选择是自己管理序列化为JSON,可能使用xqjson库或类似物,然后使用concat或类似方法将结果包装在JSON函数中。