В dropzone.js есть событие error
Однако я не могу найти документацию о том, как вызвать это из PHP.
Я попытался отправить различные ответы header () из PHP, включая 404, 500, 503 и т. Д., Но это событие не сработало.
Что я хочу сделать, так это то, что сервер проверяет MIME, чтобы убедиться, что он действителен, и если он недействителен, я отбрасываю файл и, в идеале, возвращаю ошибку, чтобы dropzone могла реагировать соответствующим образом.
Со стороны javascript я попробовал следующее:
.on("complete", function(file,response) {
console.log(response);
}
.on("error", function(file,response) {
console.log(response);
}
.on("success", function(file,response) {
console.log(response);
}
… тем не мение, response
не определено, даже если я возвращаю JSON или простой текст из сценария php. Похоже, что dropzone.js не поддерживает полный ответ сервера или, по крайней мере, не передает его пользовательскому обработчику. ЕДИНСТВЕННОЕ место, где я видел какую-либо ссылку на передачу второго параметра для событий, находится здесь, на SO, в других вопросах, которые прямо не задают этот вопрос.
Должен быть способ получить ответ от сервера (как я делал в прошлом с другим javascript-загрузчиком, таким как jQuery POST, jqUpload и т. Д.). Кажется довольно глупым, что я не могу вызвать команду, сигнализирующую о неудачной загрузке — даже если передача файла завершена — поскольку ей все еще нужно ждать ответа в скрипте. — Это означает, что я, вероятно, что-то упускаю из виду, поэтому я и обращаюсь за помощью, поскольку в их документации абсолютно ничего не говорится о том, как должен отвечать сервер — язык не имеет значения, однако в моем случае я использую PHP.
Заранее спасибо.
<?php
header('HTTP/1.1 500 Internal Server Error');
header('Content-type: text/plain');
$msg = "Your error message here.";
exit($msg);
?>
НОТА: Не перенаправляйте пользователя, иначе он не запустится exit($msg)
<script type="text/javascript">
$(document).ready(function () {
Dropzone.options.dropzone = {
maxFilesize: 10,
init: function () {
this.on("uploadprogress", function (file, progress) {
console.log("File progress", progress);
});
}
};
});
</script>
Это оно! Он должен работать.
Если вы отправите любой не-200 заголовок ответа, Dropzone определит его как ошибку и сработает error(file, response)
событие. Информация об ошибке может быть представлена как JSON и доступна через response.your_msg_variable
Обратите внимание, что просто печать response
не покажет ничего полезного, так как это объект, вы можете использовать console.log(JSON.stringify(responseText, null, 4));
Это будет довольно печатать объект до 4 уровней вниз