Как обрабатывать серверные исключения с помощью запросов AJax на стороне клиента? - PullRequest
0 голосов
/ 26 мая 2010

Привет, ребята, я заметил, что время от времени исключения генерируются на стороне сервера - однако, когда дело доходит до запросов ajax, как я могу реализовать это так, чтобы я мог информировать пользователя о том, что возникло исключение, и что-то пошло не так? Я использую Php на задней части здесь.

Ответы [ 4 ]

2 голосов
/ 26 мая 2010

Зависит от того, что возвращает метод AJAX. Если это обычный HTML, вы можете вместо этого вывести сообщение об ошибке, которое будет представлено пользователю. Если это JSON, то добавьте в структуру некоторые поля, которые могут содержать сообщение об ошибке или код ошибки, чтобы вы могли обрабатывать его при извлечении клиентской части ответа.

0 голосов
/ 26 мая 2010

Что-то, с чем я недавно столкнулся, может пригодиться:

http://php.net/manual/en/function.set-error-handler.php

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

Однако, похоже, вы также генерируете исключения в своем коде. Беглый взгляд, вы также можете создать собственный класс обработки исключений.

http://www.w3schools.com/php/php_exception.asp

Еще раз, вы можете настроить его для работы с асинхронными или синхронными запросами. В вашем Javascript, если вы используете JSON в качестве ответа, вы можете просто установить флаг ошибки, который предупредит ваш код об исключении / ошибке и будет реагировать соответствующим образом. Если вы используете прямой HTML в качестве ответа, вам, возможно, придется отправить ошибку 500 (или один из других вариантов, я не очень разбираюсь в 500 кодах), чтобы вы могли использовать onFailure или failure обработчики функций, как уже упоминали другие.

0 голосов
/ 26 мая 2010

Я не знаю, используете ли вы jQuery или нет. Мой ответ дается, если вы используете jQuery, но вы можете применить ту же концепцию к другой среде JavaScript (или ни к одной). Таким образом, пользователи фактически будут смотреть на трассировку стека вместо общего сообщения об ошибке (которое в любом случае бесполезно):

$.ajax({
            url: '/some_url', 
            type: 'post',  //or get 
            data: ..., 
            success: function() { /* handle success */ },
            error: function(XMLHttpRequest, textStatus, errorThrown) {                    
                $('#error_dlg').dialog('open').trigger('initDlg', [XMLHttpRequest]);                    
            }
        });


$('#error_dlg').dialog({
    autoOpen: false,
    width: 550,
    height: 400,
    modal: true,
    buttons: {
        'Close': function() { 
            $(this).dialog('close'); 
        }
    },
    open: function(event, ui) {            
    }           
}).bind('initDlg', function(e, XMLHttpRequest) {    
    $('#error_stack_trace').append($('<div>').html(XMLHttpRequest.responseText));
});
0 голосов
/ 26 мая 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...