Ich habe einen Uploader, der das Hochladen von Benutzern ablehnt, wenn diese ihr Kontingent überschreiten. Die Antwort ist in JSON und lautet wie folgt:

{msg: "Upload limit reached", status: "error", code: "403"}

Die Dropzone JS-Optionen lauten wie folgt:

Dropzone.options.uploadDropzone = {
    paramName: "file1", 
    maxFilesize: 200, 
    maxThumbnailFilesize: 10,
    success: function(file, response){
      ????
  }
};

Was soll ich mit der Antwort in success tun, um meinen Benutzern im Uploader einen Fehler anzuzeigen?

21
MK Yung 29 Nov. 2013 im 13:30

5 Antworten

Beste Antwort

Okay, das Folgende würde funktionieren, einfach aus der Quelle extrahieren:

success: function(file, response){
  if(response.code == 501){ // succeeded
    return file.previewElement.classList.add("dz-success"); // from source
  }else if (response.code == 403){  //  error
    // below is from the source code too
    var node, _i, _len, _ref, _results;
    var message = response.msg // modify it to your error message
    file.previewElement.classList.add("dz-error");
    _ref = file.previewElement.querySelectorAll("[data-dz-errormessage]");
    _results = [];
    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
      node = _ref[_i];
      _results.push(node.textContent = message);
    }
    return _results;
  }
}
19
suhailvs 7 Juli 2014 im 09:51

Du kannst es so machen:

success: function(file, response, action) {
    // PHP server response
    if(response == 'success') // Validate whatever you send from the server
    {
        this.defaultOptions.success(file);
    }
    else
    {
        this.defaultOptions.error(file, 'An error occurred!');  
    }
}
7
CIRCLE 29 Mai 2016 im 01:52

Dropzone hat eine Fehlererkennung eingebaut. Mach das einfach:

mydropzone = new Dropzone("#mydropzone",{
    url: "/dropzone",
    addRemoveLinks : true,
    maxFilesize: 2.0,
    maxFiles: 100,
    error: function(file, response) {
        if($.type(response) === "string")
            var message = response; //dropzone sends it's own error messages in string
        else
            var message = response.message;
        file.previewElement.classList.add("dz-error");
        _ref = file.previewElement.querySelectorAll("[data-dz-errormessage]");
        _results = [];
        for (_i = 0, _len = _ref.length; _i < _len; _i++) {
            node = _ref[_i];
            _results.push(node.textContent = message);
        }
        return _results;
    }   
});
9
spitz 24 Aug. 2014 im 01:51

Auf der PHP-Seite:

    header("HTTP/1.0 400 Bad Request");
    echo "Error uploading file";

Und auf der jQuery-Seite:

        error: function(response){
            alert(response.xhr.responseText);
        }
2
Wajdi Jurry 5 Feb. 2016 im 22:52

Nachdem ich eine Mischung der verschiedenen Antworten ausprobiert hatte, stellte ich fest, dass die aktuelle Dropzone 5.5 auf folgende Weise gut funktioniert:

Wenn Sie auf der PHP-Seite einen Fehler auslösen möchten, setzen Sie den Header 400 mit einem benutzerdefinierten Statustext wie folgt:

header('HTTP/1.1 400 Invalid file (test error).');
// no need to echo anything, unless you want more data to parse

Passen Sie dann die Fehleroption von dropzone mit den vollständigen 3 Parametern an:

mydropzone = new Dropzone("#mydropzone",{
    ....
    error: function(file, response, xhr) {
        console.log('errored',file,response,xhr);// for debugging
        if (typeof xhr !== 'undefined') {
            this.defaultOptions.error(file,xhr.statusText);// use xhr err (from server)
        } else {
            this.defaultOptions.error(file,response);// use default (from dropzone)
        }
    }   
});

Dadurch wird der Fehlertext in das richtige dz-Framework eingefügt, sodass die richtigen Elemente mithilfe der integrierten CSS- und Hover-Rückmeldungen angezeigt werden.

0
IncredibleHat 28 Okt. 2019 im 18:21