2016-09-14 4 views
-1

Следующее из этого вопроса jQuery Ajax error handling, show custom exception messages Я пытаюсь показать своим пользователям пользовательское сообщение об ошибке от ColdFusion (через AJAX), когда форма отправлена, но произошла ошибка.jQuery Сообщение об ошибке Ajax с ColdFusion

Я пытался сделать это с помощью стандартного <cfthrow errorcode="500" message="You did something wrong"/>, который будет возвращать обратно в JQuery код состояния ответа, который не 200, следовательно, его легко показать ошибку, как, например:

... 
error: function (xhr, textStatus, thrownError) { 
         $('p').text(thrownError); 
        } 

Однако в производстве ColdFusion серверам рекомендуется отключать отчет об ошибках в настройках отладки. Итак, теперь все мои пользователи видят "Internal server error" вместо специального сообщения.

Моим временным решением является просто сделать <cfreturn "Error: You did something wrong"/> <cfabort>, а затем сделать jQuery искать любой возвращенный результат с сервера, где текст начинается с «Error:».

Я бы скорее использовал правильную обработку исключений с помощью <cfthrow>. Как это может быть достигнуто с учетом рекомендации по отладке?

+1

Является ли ответ пакетом JSON? Если это так, включите в JSON свойство 'success' и/или' error', и проверьте эти значения, когда ответ получен на стороне клиента. –

+0

Так что это всегда будет обрабатываться в методе 'success()' для вызова ajax - вот что я делаю сейчас, но ищет строку «Ошибка:» в возвращаемом результате ColdFusion. Кажется неправильным обрабатывать ошибки в методе успеха. –

+0

Это неправильно, по нескольким причинам, включая SEO. Если страница имеет успех 200, ничто не скажет поисковому искателю, что ответ страницы ошибочен. –

ответ

-1

<cfthrow> errorCode не является ответом кода состояния HTTP. Если вы выбрали неперехваченную ошибку, по умолчанию будет отвечать код состояния HTTP 500, независимо от кода ошибки в вашем <cfthrow>. В этом случае вы хотите использовать метод .error() для jquery.ajax(), чтобы отобразить сообщение пользователю. Чаще всего вам следует избегать непреднамеренной ошибки и просто включить заголовок кода состояния 500. В качестве альтернативы, как вы указали в своем вопросе, вы можете return с некоторым значением, которое условно обрабатывается в .success() вашего $.ajax().

+0

Да, но проблема в том, что метод 'error()' не может отображать сообщение об ошибке, потому что его отчет об ошибках отключен администратором ColdFusion на производственных серверах - отсюда моя дилемма/вопрос. –

+0

Если вы хотите вернуть ошибку с сервера клиенту, вам нужно поймать ошибку и вернуть ошибку или просто error.message. Нет ничего естественного в том, что CF предоставляет информацию об исключении для javascript. Существует причина, по которой информация об исключении обычно отключается в производственной системе. –

1

У меня была аналогичная проблема. Попробуйте это: сначала убедитесь, что «Включить коды состояния HTTP» не отмечен в CF Admin в разделе «Настройки сервера» -> «Настройки». Возможно, вам потребуется перезапустить сервер ColdFusion. Это позволит CF установить ВСЕ статусы на 404 или 500. Затем добавьте строку ниже к вашему серверному коду (измените его в соответствии с вашим исключением/кодом).

<cfthrow type="Authentication" errorcode="450" message="this is message"> 

Это должно дать вам код статуса 450 в обработчике ошибок javascript.

Смежные вопросы