我如何在 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 或类似函数。
我不知道如何在 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 或类似函数。