Правильный механизм отправки ошибок PHP клиенту - PullRequest
5 голосов
/ 07 апреля 2010

Привет,
Я пытался найти правильный способ отправки захваченных ошибок или исключений бизнес-логики клиенту в системе Ajax-PHP. В моем случае браузер должен реагировать по-разному в зависимости от того, был ли запрос успешным или нет. Однако во всех примерах, которые я нашел, браузеру в обоих случаях сообщается только простая строка. Например:

if (something worked)
    echo "Success!";
else
    echo "ERROR: that failed";

Таким образом, когда браузер возвращает ответ Ajax, единственный способ узнать, произошла ли ошибка, - это проанализировать строку (возможно, поискать «ошибку»). Это кажется неуклюжим.

Есть ли лучший / правильный способ отправить ответ Ajax и уведомить браузер об ошибке?
Спасибо.

Ответы [ 5 ]

4 голосов
/ 07 апреля 2010

Вы можете отправить обратно HTTP-код состояния 500 (Внутренняя ошибка сервера), а затем включить сообщение об ошибке в тело.Ваша клиентская библиотека AJAX должна затем обработать ее как ошибку (и вызвать соответствующий обратный вызов и т. Д.) Без необходимости искать строки в ответе.

1 голос
/ 07 апреля 2010

Вы можете отправить обратно объект JSON, который содержит пользовательский код ошибки и сообщение об ошибке, которое затем можно обработать или отобразить непосредственно вашим пользователям:

{
     "response": 10,
     "message": "The database didn't work or something"
}

Это также будет работать на успех:

{
     "response": 1,
     "message": "It worked! Yippee!"
}
1 голос
/ 07 апреля 2010

Отправка соответствующих заголовков http должна помочь, и ваши сценарии ajax должны выполнить правильный обратный вызов. Каждая известная мне структура javascript имеет ответный вызов об успехе и ошибке для своих запросов XHR.

header('HTTP/1.1 500 Internal Server Error');

1 голос
/ 07 апреля 2010

показывать пользователю статус того, что происходит и что произошло, очень важно.

Если вы хотите структурировать ваши ajax-ответы, вам следует обратиться к формату json.

if (something worked)
    echo '{ "error": 0 }';
else
    echo '{ "error": 1 }';

Как только вы вступите в мир json, вы сможете отправить более структурированный вывод.Например:

if (something worked)
    echo '{ "error": 0 }';
else
    echo '{ "error": 1, "code": 889, "desc": "Something bad happened" }';

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

Библиотека json2.js поможет вампревратить ваш вывод в объект

1 голос
/ 07 апреля 2010

Я обычно отправляю ответ в формате JSON, например:

$response = array('status' => 'error', 'message' => 'an unknown error occured');

if( some_process() ) {
    $response['status'] = 'success';
    $response['message'] = 'Everything went better than expected.';
} else {
    $response['message'] = "Couldn't reticulate splines.";
}

die( json_encode($response) );

Итак, я могу проверить состояние response.status в моем JavaScript, найти значение «sucess» или «error» и соответственно отобразить response.message.

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