Поздравления,
Я пытался обнаружить надлежащий способ отправить зафиксированные ошибки или исключения бизнес-логики клиенту в системе Ajax-PHP. В моем случае браузер должен реагировать по-другому в зависимости от того, был ли запрос успешен или нет. Однако во всех примерах я нашел, только простая строка сообщена к браузеру в обоих случаях. Например:
if (something worked)
echo "Success!";
else
echo "ERROR: that failed";
Таким образом, то, когда браузер возвращает ответ Ajax, единственный способ знать, произошла ли ошибка, должно будет проанализировать строку (ищущий 'ошибку', возможно). Это кажется неуклюжим.
Существует ли лучший/надлежащий способ передать ответ Ajax обратно и уведомить браузер ошибки?
Спасибо.
Обычно я отправляю ответ в формате 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
соответствующим образом.
Вы можете отправить обратно код состояния HTTP 500 (внутренняя ошибка сервера), а затем включить сообщение об ошибке в тело. Затем ваша клиентская библиотека AJAX должна обработать ее как ошибку (и вызвать соответствующий обратный вызов и т. Д.) Без необходимости искать строки в ответе.
Вы можете отправить обратно объект JSON, который содержит настраиваемый код ошибки и сообщение об ошибке, которое вы затем можете обработать или отобразить непосредственно для своих пользователей:
{
"response": 10,
"message": "The database didn't work or something"
}
Это также будет работать для успеха:
{
"response": 1,
"message": "It worked! Yippee!"
}
Отправка соответствующих заголовков http должна помочь и указать вашим сценариям ajax выполнить правильный обратный вызов. Каждая известная мне инфраструктура javascript имеет обратный вызов успешности и ошибки для запросов XHR.
заголовок ('HTTP / 1.1 500 Internal Server Error');
очень важно показывать пользователю статус того, что происходит и что произошло.
Если вы хотите структурировать свои ответы 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 поможет вам преобразовать ваш вывод в объект