【问题标题】:CFML How to get status code from an ajax responseCFML 如何从 ajax 响应中获取状态码
【发布时间】:2020-08-19 11:30:33
【问题描述】:

我几乎完成了使用 CFML 制作 Web 应用程序,但我有一个关于处理错误的问题。例如,我的 Web 应用程序的一部分可以执行用户输入的 SQL 代码。但是,如果用户提供的 SQL 代码无效,那么它将无法正确执行,我会收到如下错误: https://devintranet.dep.gov/oogns/sharedComponents.cfc500

这是有道理的。如果它有助于回答我的问题,这里是网络选项卡上的信息:

我想要的只是能够在状态码返回 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) { 

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

【问题讨论】:

  • 这与 cfml 不完全相关,因为您在询问如何使用 ajax jquery 调用检测 http 状态代码响应。请参阅stackoverflow.com/questions/2955947/… 但是,您可以使用 cftry/cfcatch 捕获 cfml 错误,并将组件响应更改为您想要的任何内容,并调整您的 jquery ajax 函数以做出相应的反应。
  • 阅读jQuery AJAX implementation doc,它内置了错误处理。您只需要使用设置。 提示:参见错误部分。
  • @AndreasRu 对不起,我有一个家庭紧急情况,已经离开家一个多星期了,我只是这么说,但你的评论帮助我到达了我需要的地方。我让它工作了。非常感谢。
  • @ColePerry 无法通过 stackoverflow 向您发送私人消息,因此我将其作为评论发布。很高兴我能以某种方式提供帮助,我非常希望您和您的家人以及您所爱的人一切都好。

标签: ajax header response http-status-codes cfml


【解决方案1】:

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

  1. 在服务器端捕获错误

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

    一种方法是:

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

    要捕获 HTTP 错误,您可以 use the error() function jQuery's ajax() function provides,正如 Miguel-F 和 AndreasRu 在他们的 cmets 中提到的那样。

【讨论】:

    猜你喜欢
    • 2011-07-17
    • 1970-01-01
    • 2014-10-17
    • 2020-01-10
    • 2021-05-14
    • 2021-10-03
    • 1970-01-01
    • 2020-06-26
    • 1970-01-01
    相关资源
    最近更新 更多