与先进同行
首页 > 介绍 > 帮助

Public CMS小技巧,远程数据和异步请求接口

2020-03-05 20:08:58 阅读:loading...

    我们在网站制作中经常会遇到需要请求远程数据的情况, 在我们的网站中嵌入第三方数据通常有以下几种方式:

    1. 前端页面直接ajax请求接口,并将数据解析渲染到页面中,此种方式仅适用于查询公共接口,且对方提供了跨域调用的方式

    2. 请求页面时,后台实时请求数据,并将接口返回数据当作页面数据之一传递到前端页面,此种方式适用于大部分情况或者接口请求需要敏感信息认证时,只是接口的响应速度也会影响页面渲染速度

    3. 任务计划定时请求接口,将数据缓存下来,请求页面时直接使用缓存数据,此种方式适用于数据要求实时性不高的情况

在publiccms中怎么实现这些方式呢?

    由于publiccms对前端技术并没有任何限制,第一种依旧在前端编写js就可以实现

    第二种实现也比较简单,需要用到工具函数getHtml,具体用法:

${getHtml('远程接口地址')?no_esc}

 这样可以原样输出接口返回报文;

<#assign data=getHtml('远程接口地址')?eval/>${data.属性}

这样可以直接解析并使用json数据;

<#assign data=getXml(getHtml('远程接口地址'))/>${data.root.node}

可以直接解析并使用xml数据

    第三种情况是利用publiccms的任务计划,在任务计划脚本中直接使用 ${getHtml('远程接口地址')?no_esc}把接口返回报文输出到任务计划日志中,然后将该脚本添加到任务计划定时指向,然后使用任务计划日志指令查询并使用数据

<@_logTaskList taskId={任务计划ID} success=true count=1>
<#if page.totalCount gt 0>
<#list page.list as a><@_logTask id=a.id><#assign data=object.result?eval/></@_logTask></#list>
<#else>
<#assign data=getHtml('远程接口地址')?eval/>
</#if>
</@_logTaskList>

上述代码中已经做了任务计划没有执行,或日志被清空后的容错。这样能保证页面展示数据不会因为接口速度慢而出现延迟。


值得一提的是,在集群环境中,publiccms的任务计划有自动选举主节点的功能,同一个任务计划同意周期内不会反复在多个节点重复执行。

上一页 1 下一页
微信 微信