У меня возникли проблемы с получением сообщения об ошибке с моего обработчика удаления файла. Я не уверен, но похоже, что удаление по-разному обрабатывается при загрузке.fine uploader delete пользовательское сообщение об ошибке не возвращается
Из документов:
You may return any response you like, as the XMLHttpRequest object will be passed to your onDeleteComplete handler for further examination. However, the response code you return is important to Fine Uploader, as it uses this to determine if the delete has succeeded or not. The following response codes indicate success for this specific request: 200, 202, and 204. Any other response code indicates a failure.
В моем обработчиком сервера для удаления У меня есть это, чтобы поймать ошибку и отправить обратно ответ на FineUploader.
catch (Exception ex)
{
//const string json = "{\"success\":false}";
const string json = "{\"success\":false,\"error\":\"THIS IS THE ERROR\"}";
//const string json = "{\"error\":\" HERE IS THE ERROR! \"}";
var response = (Response)json;
response.ContentType = "text/plain";
//response.StatusCode = HttpStatusCode.InternalServerError;
return response;
}
Я попытался посылать назад {"success":false}
вместе с ошибкой, просто {"success":false}
и просто ошибки. Я проверил, что json действителен. Однако, похоже, он ничего не делает. Все, что имеет значение для FineUploader, - это response.StatusCode. Если я отправлю код ответа на отказ, FineUploader распознает ошибку и отображает сообщение для этого кода. Он также возвращается в errorReason в onError callback.
Если я не задал код состояния ответа, по умолчанию он имеет значение ОК и ошибка не возникает.
Я посмотрел на примере кода для PHP и увидеть это в обработчике удаления:
if (is_dir($target)){
$this->removeDir($target);
return array("success" => true, "uuid" => $uuid);
} else {
return array("success" => false,
"error" => "File not found! Unable to delete.".$url,
"path" => $uuid
);
}
Очевидно, что код отправляет обратно "success":fail
с сообщением об ошибке. Но я не могу работать в этом коде, какой статус ответа отправляется обратно.
Update 1: Вот это JS на клиенте, чтобы обработчик ответа сервера:
callbacks: {
onError: function(id, name, errorReason, xhrOrXdr) {
alert(qq.format("Error on file number {} - {}. Reason: {}", id, name, errorReason));
console.log(errorReason);
}
Итак, я делаю что-то не так?
Update 2:
Хорошо, я взглянул на onDeleteComplete
и мой код клиента теперь выглядит следующим образом:
callbacks: {
onDeleteComplete: function(id, xhr, isError) {
alert("onDeleteComplete => id is:" + id + " Is error?:" + isError);
},
onError: function(id, name, errorReason, xhrOrXdr) {
alert(qq.format("onError => Error on file number {} - {}. Reason: {}", id, name, errorReason));
console.log(errorReason);
},
Теперь при удалении файла в браузере я получаю onError
предупреждение сначала, а затем onDeleteComplete
. В любом случае я не могу найти способ показать сообщение об ошибке, которое я хочу отправить обратно с моего обработчика сервера. Кажется, что onError
просто показывает сообщение об ошибке HttpStatus, а не тот, который определен в моем ответе json. onDeleteComplete
не имеет параметра для возврата ошибки.
«Обработчик», который вы опубликовали, не похож на JavaScript. Включите в свой вопрос свой обработчик onDeleteComplete. –
Я добавил JavaScript в OnError.Но ваш комментарий заставляет меня понять, что проблема заключается в том, что я должен обрабатывать ошибку в onDeleteComplete, а не в вызове onError. Казалось логичным, что onError будет вызван, а onDeleteComplete будет вызван только удалением. Наверное, нет? –
Как указано в документации, будет вызван обратный вызов 'onDeleteComplete', когда операция удаления завершится. Если бы он был строго призван к успеху, он был бы назван 'onDeleteSuccess'. Такое поведение согласуется с остальной частью API, такой как обратный вызов 'onComplete'. –