使用触发器计算xQuery,并在eXistDB的HTML页面内使用return

使用触发器计算xQuery,并在eXistDB的HTML页面内使用return,xquery,exist-db,Xquery,Exist Db,我想使用按钮/链接/任何东西从我的eXist Webapp调用xQuery函数,并使用返回值显示引导警报。所以包括一个 执行xQuery 在我的html中,如果单击它,则进行评估 let $name := "Peter" return <div class="alert alert-success" role="alert">Hi {$name}</div> let$name:=“Peter” 返回Hi{$name} (事实上,我想要比这更复杂的东西,但你明白了……

我想使用按钮/链接/任何东西从我的eXist Webapp调用xQuery函数,并使用返回值显示引导警报。所以包括一个

执行xQuery
在我的html中,如果单击它,则进行评估

let $name := "Peter"
return <div class="alert alert-success" role="alert">Hi {$name}</div>
let$name:=“Peter”
返回Hi{$name}
(事实上,我想要比这更复杂的东西,但你明白了……)

返回

你好,彼得
在我的页面里面。这可能吗?如果可能,怎么可能

在这里,使用模板系统对我没有帮助,只需链接到数据库中的xQuery即可执行查询,但会重定向到显示结果的另一个页面。我可以使用AJAX评估xQuery并修改当前DOM吗


谢谢

出于完整性和未来参考的原因,我将在此处发布此文件的MWE:

  • 将按钮和结果面板添加到eXist中的页面:
  • 
    
  • 在应用程序的资源文件夹中有一个
    runxquery.js
    ,并在
    page.html
    中引用它:
  • 单击该按钮将触发应用程序文件夹中按钮id中定义的xquery

  • 如果运行xQuery应返回HTML代码,则需要在xQuery中指定:

  • 声明命名空间输出=”http://www.w3.org/2010/xslt-xquery-serialization";
    声明选项输出:方法“html”;
    声明选项输出:媒体类型“application/html”;
    let$text:=“这是警报文本”
    返回
    {$text}
    
    有关此操作的示例,请参阅。源代码位于。谢谢,但我不明白结果是如何写入
    输出的
    div中的,或者按钮是如何与查询连接的。。。此外,我希望在我的模块中有一个固定的查询,通过按下按钮来调用它。“运行”按钮向eXist的REST服务器提交一个HTTP POST请求,其中包含要在请求主体中执行的查询。要调用固定查询,只需向数据库中存储查询的URL提交HTTP GET请求。剩下的只是javascript的问题——这不是一个eXist或XQuery特定的问题。但我链接到的演示应用程序确实在实践中证明了这一点;看…啊!我现在觉得有点傻。我以为这是纯Xquery,谢谢你的链接,现在我知道怎么做了。
    $(document).ready(function() {
        $(".run").click(function(ev) {
            ev.preventDefault();
            file = this.id;
            var output = $(this).parent().parent().find(".output");
            var indicator = $(this).parent().parent().find(".load-indicator");
            function run() {
                indicator.show();
                output.hide();
                $.ajax({
                    url: "/exist/rest/db/apps/yourapp/" + file,
                    type: "GET",
                    success: function(result) {
                        indicator.hide();
                        output.html(result);
                        output.slideDown(600);
                    }
                });
            }
    
            if (output.is(":empty")) {
                run();
            } else {
                output.slideUp(800, function() {
                    output.empty();
                    run();
                });
            }
        });
    });
    
    declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization";
    declare option output:method "html";
    declare option output:media-type "application/html";
    
    let $text := "This is the alert text"
    
    return 
    <div class="alert alert-success alert-dismissible" data-dismiss="alert" role="alert">
    <button type="button" class="close" data-dismiss="alert" aria-label="Close"/>
       {$text}
    </div>