我正在重写文件上传页面以使用jquery-file-upload插件。服务器(和页面)是基于grails的,表单有两个“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事件中使用。我无法弄清楚如何做到这一点。我假设我在FileMeta类中呈现为json的任何内容都将在数据中返回,但它似乎不是。
例如,我的FileMeta类包含以下字段:
private String name;
private String size;
private String type;
private String error;
private String solutionId;
private String token;
但是当我在fileuploaddone中访问data.files时,我看不到从服务器返回的相同数据。我只获取名称,大小和类型的值。我手动将字符串设置为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。任何有关处理发生位置或如何覆盖处理的提示都将非常感激。
问题在于uploaddone回调中的这一行:
$.each(data.files, function (index, file) { //loop though each file
data.files是jquery-upload-done小部件的特定构造。当我用data.result替换它时,返回的结果变得可用。所以,只是我的困惑。