Как я могу вызвать событие ошибки в DropZone с помощью PHP?

В 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.

Заранее спасибо.

9

Решение

<?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>

Это оно! Он должен работать.

12

Другие решения

Если вы отправите любой не-200 заголовок ответа, Dropzone определит его как ошибку и сработает error(file, response) событие. Информация об ошибке может быть представлена ​​как JSON и доступна через response.your_msg_variable

Обратите внимание, что просто печать response не покажет ничего полезного, так как это объект, вы можете использовать console.log(JSON.stringify(responseText, null, 4));

Это будет довольно печатать объект до 4 уровней вниз

2

По вопросам рекламы [email protected]