如何使用PHP在DropZone中触发错误事件

How can I trigger the error event in DropZone using PHP?

本文关键字:错误 事件 DropZone 何使用 PHP      更新时间:2023-09-26

在dropzone.js中,有一个事件error,但我找不到任何关于如何从PHP触发此事件的文档。

我尝试过从PHP发送各种header()响应,包括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是未定义的,即使我从php脚本返回JSON或纯文本也是如此。dropzone.js似乎不支持获取完整的服务器响应,或者至少它没有将其提升到自定义处理程序。我唯一看到的关于在事件上传递第二个参数的地方是在SO上的其他问题中,而不是直接问这个问题。

必须有一种方法来获得服务器响应(就像我过去使用其他上传器javascript(如jQueryPOST和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级的对象