CFML Как получить код состояния из ответа ajax - PullRequest
0 голосов
/ 05 мая 2020

Я почти закончил создание веб-приложения с CFML, но у меня есть вопрос об обработке ошибок. Например, часть моего веб-приложения может выполнять введенный пользователем код SQL. Однако, если код SQL, предоставленный пользователем, недействителен, он не будет выполняться должным образом, и я получаю такую ​​ошибку: https://devintranet.dep.gov/oogns/sharedComponents.cfc 500

Что имеет смысл. Если это вообще помогает ответить на мой вопрос, вот информация на вкладке сети: enter image description here

Все, что я хочу, это иметь возможность поймать, когда код состояния возвращает 500, и иметь возможность принять меры на основании этого. Например, если я делаю запрос, который имеет код состояния 500, я могу использовать предупреждение JS, чтобы сообщить пользователю, что что-то пошло не так.

Вот функция в sharedComponents.cf c:

<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) { 

На самом деле после этого много кода, но я считаю, что он не имеет отношения к тому, что я ' м пытаюсь сделать. Буквально, если вы покажете мне, как получить код состояния из заголовка ответа, думаю, я буду в порядке.

1 Ответ

1 голос
/ 05 мая 2020

В вашем запросе есть две отдельные проблемы.

  1. Ошибки перехвата на стороне сервера

    Может случиться так, что запрошенный столбец недоступен в AttributeQuery результат. Поэтому вы должны проверить это перед тем, как получить к нему доступ.

    Один из способов сделать это:

<cfreturn structKeyExists(AttributeQuery, default_ColName) ?
    AttributeQuery[default_ColName] : "" /> 

Перехват ошибок на стороне клиента

Чтобы перехватить HTTP-ошибки, вы можете использовать функцию error() * Функция 1025 * s ajax() предоставляет , как Miguel-F и AndreasRu упоминают в своих комментариях.

...