如何判断数据库查询函数special是否有输出?两次尝试均失败
问题分析与解决方案
首先得明确:你的special函数目前没有返回值——它只是通过response.write直接把内容输出到网页响应里,并没有用function = 结果的方式返回任何值。在VBScript里,没有返回值的函数默认会返回Empty,所以你那两次判断其实都是在检查Empty,自然达不到你想要的“判断是否有结果输出”的效果。
下面给你两种可行的解决思路:
思路1:修改函数,让它返回结果(推荐)
直接调整函数逻辑,让它既输出内容,又返回查询到的结果(或者标记是否有结果)。这样后续判断就非常直接了:
function special(key) ' 先执行数据库查询,把结果存到变量里 dim result ' 这里替换成你实际的数据库查询代码,比如: ' result = YourDatabase.Query("SELECT ... WHERE key = '" & key & "'") ' 先判断是否有结果 if not IsNull(result) and result <> "" then ' 设置函数的返回值 special = result ' 执行原来的输出逻辑 response.write result ' 你的其他输出逻辑(HTML/文本/数字组合) response.write "<p>相关内容:" & result & "</p>" ' 条件输出的逻辑 if result = "fp" then response.write "<p>额外的fp专属内容</p>" end if else ' 如果没结果,返回Empty或者Null special = Empty ' 也可以在这里输出“无结果”的提示 response.write "没有找到相关数据" end if end function
调用的时候就可以正常判断了:
if not IsEmpty(special("fp")) then response.write "found" end if
思路2:捕获函数的输出内容(适合无法修改原函数的情况)
如果因为某些原因不能修改special函数的代码,可以利用VBScript的响应缓冲功能,捕获函数输出的内容,再判断是否为空:
' 开启响应缓冲,这样输出的内容会先存在内存里,不会直接发送到浏览器 Response.Buffer = True ' 清空当前缓冲里的内容,避免影响后续判断 Response.Clear ' 调用你的special函数,它的输出会被存到缓冲中 special("fp") ' 把缓冲里的内容取出来 dim output output = Response.Content ' 清空缓冲,准备后续的正常输出 Response.Clear ' 判断是否有输出内容 if output <> "" then response.write "found" ' 如果需要把原来的内容输出,就加上这行 response.write output end if
两种思路里,第一种更符合代码规范,也更容易维护,优先推荐~
内容的提问来源于stack exchange,提问作者Ali Sheikhpour
相关产品推荐
相关产品推荐

