Надлежащий механизм для отправки ошибок PHP клиенту

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

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

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

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

5
задан Chris Z 7 April 2010 в 14:09
поделиться

5 ответов

Обычно я отправляю ответ в формате 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 и найти значение «успех» или «ошибка» и отобразите response.message соответствующим образом.

1
ответ дан 14 December 2019 в 04:34
поделиться

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

4
ответ дан 14 December 2019 в 04:34
поделиться

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

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

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

{
     "response": 1,
     "message": "It worked! Yippee!"
}
1
ответ дан 14 December 2019 в 04:34
поделиться

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

заголовок ('HTTP / 1.1 500 Internal Server Error');

1
ответ дан 14 December 2019 в 04:34
поделиться

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

Если вы хотите структурировать свои ответы 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
ответ дан 14 December 2019 в 04:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: