2013-11-29 2 views
14

У меня есть загрузчик, который отклоняет загрузку пользователей, когда они превышают свою квоту. Ответ в формате JSON и выглядит следующим образом:Как вызвать ошибку из ответа сервера (JSON) в Dropzone JS?

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

возможные параметры Dropzone JS выглядит следующим образом:

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

Что я должен делать с ответом на success, чтобы показать ошибку на мой пользователей в загрузчике?

ответ

16

хорошо следующий будет работать, просто извлечь из источника:

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; 
    } 
} 
8

Dropzone имеет встроенное обнаружение ошибок. Просто сделайте это:

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; 
    } 
}); 
2

в PHP стороне:

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

и JQuery стороне:

 error: function(response){ 
      alert(response.xhr.responseText); 
     } 
6

Вы можете сделать это следующим образом:

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!'); 
    } 
} 
+0

Просто попробовал работает, но имеет ли он какой-либо побочный эффект? Потому что я боюсь, что мой вызов будет отменен, вызвав функцию по умолчанию напрямую. – Dummy

Смежные вопросы