как передать идентификатор обратно в ответе jquery-file-upload? - PullRequest
0 голосов
/ 15 марта 2019

Я переписываю страницу загрузки файла, чтобы использовать плагин jquery-file-upload.Сервер (и страница) основаны на граалях, а форма имеет два поля "input type = 'files'".Файлы из обоих полей автоматически загружаются на сервер.

Я использую только базовый файл jquery.fileupload.js (не -ui-версию).Вот список файлов для загрузки файлов, которые я загружаю:

'jquery-file-upload' {
    dependsOn 'jquery'
    resource url: 'libs/jquery-file-upload/js/jquery.iframe-transport.js'
    resource url: 'libs/jquery-file-upload/js/jquery.fileupload.js'
    resource url: 'libs/jquery-file-upload/js/jquery.fileupload-process.js'
    resource url: 'libs/jquery-file-upload/js/jquery.fileupload-validate.js'
    resource url: 'libs/jquery-file-upload/js/vendor/jquery.ui.widget.js'
    resource url: 'libs/javascript-templates/js/tmpl.min.js'
    resource url: 'libs/jquery-file-upload/css/jquery.fileupload.css'

}

На стороне сервера я создал класс FileMeta, который отображается клиенту как json.

Моя проблема в том, что бывают случаи, когда я хочу вернуть некоторую дополнительную информацию клиенту для использования в событии fileuploaddone.Я не могу понять, как это сделать.Я предполагал, что все, что я отобразил как json в моем классе FileMeta, будет возвращено в данных, но это не так.

Например, мой класс FileMeta имеет следующие поля:

private String name;
private String size;
private String type;
private String error;
private String solutionId;
private String token;

Но когда я обращаюсь к data.files в fileuploaddone, я не вижу те же данные, которые были возвращены с сервера,Я получаю значения только для имени, размера и типа.Я вручную установил строки в type, error, solutionId и token - они были либо перезаписаны, либо проигнорированы.Вот что сейчас делает fileuploaddone:

 upForm.on('fileuploaddone', function (e, data) { // invoke callback method on success
    $.each(data.files, function (index, file) { //loop though each file
        if (file.name){ //successful upload returns a file url
            alert("done with " + file.name);
            alert("solutionId is " + file.solutionId);
            alert("type is " + file.type);
            alert("size is " + file.size);
            alert("error is " + file.error);
            alert("token is " + file.token);
            jQuery('#solutionId').val(file.solutionId);

        } else if (file.error) {
            alert("error is " + file.error);
            var error = $('<span class="text-danger"/>').text(file.error); //error text
           alert(error);
        }
    });

});

Очевидно, что что-то обрабатывает возвращенный json.Любые советы о том, где происходит эта обработка, или о том, как она может быть перезаписана, будут высоко оценены.

1 Ответ

0 голосов
/ 15 марта 2019

Проблема была с этой строкой в ​​обратном вызове uploaddone:

  $.each(data.files, function (index, file) { //loop though each file

data.files - это специальная конструкция для виджета jquery-upload-done. Когда я заменил его на data.result, возвращенные результаты стали доступны. Так что просто путаница с моей стороны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...