• 第三十二章 使用 CSP 进行基于标签的开发 - 服务器端方法


    第三十二章 使用 CSP 进行基于标签的开发 - 服务器端方法

    CSP提供了两种从HTML客户机调用服务器端方法的技术。

    • 使用HTTP提交机制。
    • 使用超事件,#server(同步)或#call(异步)。
      也可以使用%CSP.PageHyperEventCall()方法。

    使用HTTP Submit的优点是客户端编程简单,不需要客户端组件。
    它的缺点是在方法调用之后由客户机重新绘制页面,并且服务器端编程更加困难。

    如果使用超级事件,#SERVER#CALL是使用XMLHttpRequest来实现的。#Call是异步的:如果(作为用户)在网页上输入值,则该页面不会立即更新;在更新时,可能已移动到另一个页面。#SERVER是同步的;页面在从调用返回时立即更新。

    请注意,同步XMLHttpRequest已被许多浏览器弃用,通常情况下,移动趋势是只支持异步XMLHttpRequest.

    HTTP提交和超级事件将在以下各节中进一步描述。

    Caché and AJAX

    缩写AJAX通常用来指代一组技术,这些技术允许从服务器更新客户端页面的数据,而不必请求新的浏览器页面。Caché超链接允许AJAX交互,而不需要程序员处理所有与服务器的通信。允许AJAX事务的两种方式:

    1. 对于CSP,使用#server()#call()命令允许从客户端直接调用服务器端方法。(也可以使用%CSP.PageHyperEventCall()方法。)
    2. 对于Zen,程序员可以定义ZenMethods来处理客户端-服务器交互。这些可能是同步的,也可能是异步的,具体取决于方法签名:

    同步AJAX请求的签名

    Method XYZ(arg) as %Status [ZenMethod]    
    
    • 1

    异步AJAX请求的签名

    Method XYZ() [ZenMethod]              
    
    • 1

    用Ajax实现并行处理

    由于^%cspSession全局节点上的锁,对CSPAJAX请求在服务器上按顺序处理。要使AJAX请求能够并行处理,如果正在使用的应用程序没有在会话全局/对象中设置任何内容(因此只读),可以使用%CSP.Session.Unlock()方法为该会话和%Session.Lock解锁该会话的CSP全局。

    通过HTTP提交调用服务器端方法

    使用HTTP提交调用服务器代码只需要很少的浏览器功能。对于拥有广泛受众并且必须支持多种浏览器的应用程序来说,这是一种很好的技术。使用HTTP提交时,用户每次单击提交按钮时都会重新显示请求的页面。

    可以通过以下方式处理HTTP提交:

    1. 提供包含提交按钮的HTML表单:
    <form name="MyForm" action="MyPage.csp" method="GET">
    User Name: <input type="TEXT" name="USERNAME"><br>
    <input type="SUBMIT" name="BUTTON1" value="OK">
    </form>
    
    • 1
    • 2
    • 3
    • 4

    它定义了一个简单的表单,其中包含一个名为UserName的文本字段和一个名为BUTTON1的提交按钮。表单的action属性指定表单提交到的URL。方法属性指定使用哪种HTTP协议提交表单:POSTGET

    1. 当用户单击提交按钮BUTTON1时,浏览器将收集表单中所有控件的值,并将它们提交给表单的action属性指定的URL。(请注意,页面可以通过使用action属性指定其名称或将action属性保留为空来提交回其自身。)。无论表单是通过POST还是GET提交的,CSP都会将提交的值视为URL参数。在这种情况下,提交表单相当于请求以下URL
    MyPage.csp?USERNAME=Elvis&BUTTON1=OK
    
    • 1

    包括SUBMIT按钮的名称和值。
    如果表单上有多个SUBMIT按钮,则请求中只包含实际按下的数据按钮。
    这是检测何时发生SUBMIT的关键。

    1. 服务器代码(在本例中是MyPage.csp)检测到提交已经发生。这是通过测试%request对象中的名称BUTTON1来实现的:
    <script language="Cache" runat="SERVER">
       // test for a submit button
       If ($Data(%request.Data("BUTTON1",1))) {
          // this is a submit; call our method
          Do ..MyMethod($Get(%request.Data("USERNAME",1)))
       }
    </script>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    1. 在调用所需的服务器端逻辑后,服务器代码继续运行并返回HTML以供浏览器显示。这可能是当前表单或不同页面的重新显示。
  • 相关阅读:
    C++ using 编译指令与名称冲突
    Selenium + Python自动化测试入门
    VUE3 之 多个元素之间的过渡 - 这个系列的教程通俗易懂,适合新手
    智能隐形眼镜的研究进展与挑战
    MySQL底层知识总结
    redis的高可用
    一日一技:Python如何同时调用多个GPT的API?
    TikTok美国市场爆品:美牙仪一周售出3.36万单,GMV近百万刀
    HTTP请求头
    京东JD开放平台API接口调用采集商品详情数据获取商品规格信息、销量、卖家信息抓取案例
  • 原文地址:https://blog.csdn.net/yaoxin521123/article/details/127608588