ajax - CFML 如何从 ajax 响应中获取状态码
问题描述
我几乎完成了使用 CFML 制作 Web 应用程序,但我有一个关于处理错误的问题。例如,我的 Web 应用程序的一部分可以执行用户输入的 SQL 代码。但是,如果用户提供的 SQL 代码无效,那么它将无法正确执行,我会收到如下错误: https ://devintranet.dep.gov/oogns/sharedComponents.cfc 500
这是有道理的。如果它有助于回答我的问题,这里是网络选项卡上的信息:
我想要的只是能够在状态代码返回 500 时捕获并能够基于此采取行动。例如,如果我发出一个最终状态码为 500 的请求,那么我可以使用 JS 警报来告诉用户出了什么问题。
这是 sharedComponents.cfc 中的函数:
<cffunction name="LoadAttribute" access="remote" returnformat="plain" returntype="string" >
<cftry>
<cfquery name ="AttributeQuery" datasource="RBDMS_UPDATE">
SELECT *
FROM dbo.OOGNS_Queries
WHERE UPPER(QueryName) = UPPER(<cfqueryparam cfsqltype="varchar" value="#form.default_ProfileName#" />)
</cfquery>
<cfcatch>
<cfoutput>
#cfcatch.Detail#<br />
#cfcatch.Message#<br />
#cfcatch.tagcontext[1].line#:#cfcatch.tagcontext[1].template#
</cfoutput>
</cfcatch>
</cftry>
<cfreturn AttributeQuery["#default_ColName#"][1] />
</cffunction>
这是调用它的ajax函数:
$.ajax({
type: "POST",
url: "sharedComponents.cfc",
data: { method: "LoadAttribute",
default_ProfileName: ProfileName,
default_Entity: Entity,
default_ColName: ColName,
},
datatype: "json"
}).done(function(returnresult) {
在那之后实际上有很多代码,但我相信它与我正在尝试做的事情无关。从字面上看,如果你能告诉我如何从响应头中获取状态码,我想我会很好的。
解决方案
您的请求中有两个单独的问题。
在服务器端捕获错误
可能是请求的列在
AttributeQuery
结果中不可用。所以你必须在访问它之前检查它。一种方法是:
<cfreturn structKeyExists(AttributeQuery, default_ColName) ?
AttributeQuery[default_ColName] : "" />
在客户端捕获错误
要捕获 HTTP 错误,您可以使用
error()
jQueryajax()
函数提供的函数,正如 Miguel-F 和 AndreasRu 在他们的评论中提到的那样。
推荐阅读
- javascript - 如何在剑道网格行悬停时给出边框
- amazon-web-services - 我们可以将递归与 AWS lambda 函数一起使用,它会在 15 分钟的时间限制内停止执行并保存它停止的点吗?
- vue.js - Vetur/Eslint/VS 代码 - 无法在 .vue 文件的括号之间设置空格
- macos - docker-compose 命令不适用于 mac
- c++ - 如何仅对 10 x 10 矩阵的右四分之一进行排序?
- bash - grep 命令提取 kubernetes pod 名称
- mongodb - 如何在 MongoDB 的聚合查询中将数组转换为没有键的对象?
- ios - 如果 iOS 版本 12 或更早版本未实施 Sign In with Apple,Apple 审核团队是否会批准该应用程序?
- swift - 如何根据单元格大小设置集合视图高度?
- oracle - 根据顺序将多个 oracle 表分组到一个表中