在独立Classic ASP页面中调用外部js文件函数无法运行问题咨询
问题根本原因
核心错误是混淆了服务器端执行逻辑和客户端执行逻辑的运行边界:
- 你写在
<body>里的ElseIf (sApplCode = "CLOAN") Then这部分是Classic ASP的服务端VBScript代码,运行在服务器上,在页面内容返回给浏览器之前就已经全部执行完成。 - 你通过
<script src="../common/javascript/common.js">引入的JS函数属于客户端JavaScript,只有等服务器把页面响应返回给浏览器、浏览器加载完成对应JS文件之后才会执行,此时服务端的ASP代码早已运行结束,不可能跨环境调用客户端的JS函数。
除此之外还有两个次要问题:
- 你给出的JS函数中用到的
enableBHIattributes变量没有定义逻辑,就算放在客户端运行也可能因变量未定义报错 - 你写的ASP代码块中
If判断结尾缺少End If语法闭合
解决方案
方案1:将JS逻辑转写为ASP服务端VBScript函数(最推荐,适合需要服务端判断XSL样式的场景)
直接在ASP服务端完成XML节点判断,不需要调用客户端JS,示例代码:
' 放在ASP代码块中,需提前确保enableBHIattributes为已正确加载的XMLDOM对象 Function jsEnableBHIRemappingAttributes() If Not IsNull(enableBHIattributes) And Not enableBHIattributes Is Nothing Then Dim oOldFormat Set oOldFormat = enableBHIattributes.selectSingleNode("/return/data/EnableBHIRemappingAttributes") If Not oOldFormat Is Nothing Then If LCase(oOldFormat.text) = "y" Then jsEnableBHIRemappingAttributes = True Exit Function End If End If End If jsEnableBHIRemappingAttributes = False End Function
修正后的原有调用逻辑:
ElseIf (sApplCode = "CLOAN") Then Dim isBHIAttributesEnabled: isBHIAttributesEnabled = jsEnableBHIRemappingAttributes() If (isBHIAttributesEnabled = True) Then sStylesheetFile = "commercialLoansBHI.xsl" Else sStylesheetFile = "commercialLoans.xsl" End If ' 补全缺失的闭合语法
方案2:如果判断逻辑必须在客户端执行,将样式切换逻辑也迁移到客户端
把服务端的变量输出到客户端可读取的位置,由JS完成判断后再加载对应XSL样式:
- 先在页面输出服务端变量和XML内容:
<script> // 输出服务端变量到客户端 const sApplCode = "<%= sApplCode %>"; // 输出XML内容供客户端解析 const enableBHIattributes = new DOMParser().parseFromString(`<%= Server.HtmlEncode(enableBHIattributes.xml) %>`, "text/xml"); </script>
- 客户端调用原有JS函数判断后,再执行XSL渲染逻辑即可。
附加检查项
如果后续需要用到客户端JS,可以先检查JS引入路径是否正确:如果站点部署在虚拟目录下,相对路径../common/javascript/common.js可能失效,建议改为站点绝对路径/common/javascript/common.js。
内容的提问来源于stack exchange,提问作者Dinesh Baghel
相关产品推荐
相关产品推荐

