XSLTForms实例数据获取:HTTP错误处理与自动加载实现
XSLTForms实例数据加载的错误处理与自动加载方案
问题背景
当直接用src属性加载实例数据时,比如:
<xf:instance id="feed" src="https://httpbin.org/status/404"/>
XSLTForms会弹出默认模态错误提示,无法自定义处理逻辑。因此尝试通过初始化空实例+提交操作的方式实现自定义错误处理,代码如下:
<xf:instance id="feed"> <channel xmlns=""> <title/> <description/> <image> <url/> </image> <item/> </channel> </xf:instance> <xf:submission id="load" replace="instance" instance="feed" resource="https://httpbin.org/status/404" method="get" serialize="none"> <xf:message level="modeless" ev:event="xforms-submit-error"> <xf:output value="'Error fetching data'"/> </xf:message> </xf:submission>
该方案需要手动点击触发按钮执行加载:
<xf:trigger id="t1"> <xf:label>LOAD</xf:label> <xf:send ev:event="DOMActivate" submission="load"/> </xf:trigger>
现有两个需求需要解决:
- 如何替代手动按钮加载,利用
xforms-ready事件实现自动加载(达到类似src属性的效果,同时保留自定义错误处理)? - 能否检测并显示服务器返回的实际错误信息(如404、CORS错误等)?
问题1:实现自动加载
直接在模型上绑定xforms-ready事件,触发提交操作即可,无需手动按钮。修改模型部分代码,添加事件监听器:
<xf:model> <xf:instance id="feed"> <channel xmlns=""> <title/> <description/> <image> <url/> </image> <item/> </channel> </xf:instance> <xf:submission id="load" replace="instance" instance="feed" resource="https://httpbin.org/status/404" method="get" serialize="none"> <xf:message level="modeless" ev:event="xforms-submit-error"> <xf:output value="'Error fetching data'"/> </xf:message> </xf:submission> <!-- 绑定xforms-ready事件自动触发提交 --> <xf:send ev:event="xforms-ready" submission="load"/> </xf:model>
当XSLTForms初始化完成(触发xforms-ready事件)时,会自动执行load提交,完成数据加载,同时保留自定义错误处理逻辑。
问题2:获取并显示实际错误信息
XSLTForms在xforms-submit-error事件中提供了多个上下文变量,可以获取错误详情:
ev:error-type:错误类型(如resource-error表示资源加载错误)ev:status-code:HTTP状态码(如404、500)ev:message:错误描述信息
修改提交的错误处理部分,利用这些变量展示具体错误:
<xf:submission id="load" replace="instance" instance="feed" resource="https://httpbin.org/status/404" method="get" serialize="none"> <xf:message level="modeless" ev:event="xforms-submit-error"> <xf:output value="concat('加载失败: ', if (exists(ev:status-code)) then concat('HTTP ', ev:status-code) else ev:message)"/> </xf:message> </xf:submission>
这样就能根据不同错误场景显示对应的信息:比如HTTP 404、CORS相关错误描述等。如果需要更细致的分类处理,也可以通过xf:choose判断ev:error-type或ev:status-code,输出不同提示内容。
内容的提问来源于stack exchange,提问作者monojohnny
相关产品推荐
相关产品推荐

