首页 > 解决方案 > 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) { 

在那之后实际上有很多代码,但我相信它与我正在尝试做的事情无关。从字面上看,如果你能告诉我如何从响应头中获取状态码,我想我会很好的。

标签: ajaxheaderresponsehttp-status-codescfml

解决方案


您的请求中有两个单独的问题。

  1. 在服务器端捕获错误

    可能是请求的列在AttributeQuery结果中不可用。所以你必须在访问它之前检查它。

    一种方法是:

<cfreturn structKeyExists(AttributeQuery, default_ColName) ?
    AttributeQuery[default_ColName] : "" /> 
  1. 在客户端捕获错误

    要捕获 HTTP 错误,您可以使用error()jQueryajax()函数提供的函数,正如 Miguel-F 和 AndreasRu 在他们的评论中提到的那样。


推荐阅读